【发布时间】:2020-08-31 04:12:27
【问题描述】:
我正在尝试编写代码,使用 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 中使用这个函数,所以请不要告诉我以其他方式编写代码。
【问题讨论】:
-
您需要取消分配(释放缓冲区)为您分配的 getline!即使程序失败。添加到@user3121023,您的代码中的免费通话在哪里?
-
如果缓冲区不包含
\t制表符,则strchr()-tname将位于tname之前。这将导致段错误。 -
始终检查
fopen是否成功。绝对没有理由不这样做。你怎么知道strchr是罪魁祸首? -
谢谢你们,它被爱了
-
@RayanFarhat 问题中的
'\t'在哪里?问题和答案放在一起没有意义。 DV 直到修复。