[解決済み] 改行文字を破棄しないstrtok
2022-02-05 08:43:37
質問
というわけで、名前と数字の羅列の入力ファイルを持っています。各文字列からすべてのデータを抽出できるように、文字列を分割するためにstrtokを使い始めました。すべてが正しく動作しているように見えますが、何らかの理由で改行文字が破棄されないのです。
int procFile(PERSON **data, FILE* fpFile)
{
// Local Declaration
char temp[1000];
char proc[15];
char *entry;
char *loc;
int success = 0;
// Statement
if(fgets(temp, sizeof(temp), fpFile))
{
(*data) = aloMem(); // free
entry = temp;
loc = strtok(entry, " ()-");
strcpy(proc, loc);
loc = strtok(NULL, " ()-");
strcat(proc, loc);
loc = strtok(NULL, " ()-");
strcat(proc, loc);
sscanf(proc, "%ld", &(*data)->phone);
loc = strtok(NULL, "\0");
strcpy((*data)->name, loc);
success++;
printf("%s1", (*data)->name);
}
return success;
}// procFile
正しく動作しているかどうかを確認するために結果を印刷してみたところ、このように出力されました。
Brown, Joanne
1South, Frankie
1Lee, Marie
1Brown, Joanne
1Trapp, Ada Eve
1Trapp, David
1White, D. Robert
1Lee, Victoria
1Marcus, Johnathan
1Walljasper, Bryan
1Trapp, Ada Eve
1Brown, Joanne
1Andrews, Daniel
を印刷しています。
1
の後に、名前の直後ではなく、改行で表示されます。どなたか、この問題を解決する方法を教えていただけませんか?
解決方法は?
トークン化する前
temp
のように、改行を削除してください。
char *newline = strchr( temp, '\n' );
if ( newline )
*newline = 0;
strchr
検索
temp
を探し、そのポインタを返します(改行文字が見つからない場合はNULLを返します)。 そして、改行文字を 0 (文字列の終端) で上書きする。
関連
-
[解決済み] strtokのセグメンテーションフォールト
-
[解決済み] mallocの結果はキャストするのですか?
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] C++でextern "C "を使用した場合の効果は?
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] C言語で配列のサイズを決定するにはどうすればよいですか?
-
[解決済み] Cプリプロセッサはなぜ "linux "という単語を定数 "1 "と解釈するのですか?
-
[解決済み] printfは、フォーマット文字列の中に改行がないと、呼び出し後にフラッシュしないのはなぜですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】変数の警告が設定されているが使用されていない
-
[解決済み】 strcpyとstrdupの比較
-
[解決済み] clang: error: linker command failed with exit code 1が表示されるのはなぜですか?
-
[解決済み】警告。この関数ではXが初期化されていない状態で使用される可能性があります。
-
[解決済み】C言語で浮動小数点例外(コアダンプ)発生
-
[解決済み】 「配列のイニシャライザーはイニシャライザーリストまたは文字列リテラルでなければなりません」と表示されるのですが?
-
[解決済み] C: エラー: ';'トークンの前に ')' があると予想される
-
[解決済み] char pointers: 'char*' から 'char' への無効な変換?
-
[解決済み】未定義参照 makefile が間違っているのかも?
-
[解決済み】エラー:呼び出されたオブジェクトは、関数または関数ポインタではない