1. ホーム
  2. c

[解決済み] 改行文字を破棄しない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 (文字列の終端) で上書きする。