【问题标题】:strchr function keep giving me core dumped errorstrchr 函数不断给我核心转储错误
【发布时间】: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 直到修复。

标签: c strchr


【解决方案1】:

如果缓冲区不包含\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);
}

【讨论】:

  • 为什么这个答案不在问题中时谈论'\t'
  • @chux-ReinstateMonica,是的。修好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
  • 2020-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多