1

getline() および strchr() 関数を使用して、画面上のテキスト ファイルに単語をコピーして出力するコードを記述しようとしています。これは私のコードです:

void read_teams(char* text)
{
    FILE *fp=fopen(text,"r");
    char* tname=NULL;
    size_t tname_size=0;
    while(getline(&tname,&tname_size,fp)!=EOF)
    {
        tname[strchr(tname,'\n')-tname]='\0';
        printf("%s\n",tname);
    }
    fclose(fp);
}

strchr 関数を読み取ると、次のように表示されます。

Segmentation fault (core dumped)

なぜ?この関数を getline で使用する必要があるため、別の方法でコードを書くように言わないでください。

4

1 に答える 1

2

\nバッファに文字が含まれていない場合は、 のstrchr()-tname前になりtnameます。これにより、セグ フォールトが発生します。だから使用:

while(getline(&tname,&tname_size,fp)!=EOF)
{
    char *p= strchr(tname,'\n');
    if (p)
        tname[p-tname]='\0';
    printf("%s\n",tname);
}
于 2020-05-14T15:06:03.137 に答える