strchr 函数一直给我核心转储错误

strchr function keep giving me core dumped error

我正在尝试编写代码,使用 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]='[=10=]';
        printf("%s\n",tname);
    }
    fclose(fp);
}

读取 strchr 函数时显示:

Segmentation fault (core dumped)

为什么? 我必须将此功能与 getline 一起使用,所以请不要告诉我以其他方式编写代码。

如果缓冲区不包含 \n 字符,则 strchr()-tname 将排在 tname 之前。这将导致段错误。所以使用:

while(getline(&tname,&tname_size,fp)!=EOF)
{
    char *p= strchr(tname,'\n');
    if (p)
        tname[p-tname]='[=10=]';
    printf("%s\n",tname);
}