出于某种原因,这段代码是segfaulting,原因我无法找到。
char *read_line(FILE *fp)
{
char *out;
int counter = 0;
char c = getc(fp);
while (c != '\n' && c != EOF)
{
*(out + counter) = c;
counter++;
c = getc(fp);
}
if (c == EOF || feof(fp))
{
return NULL;
}
*(out + counter) = '\0';
return out;
}
我已经尝试在gdb
中运行它,这告诉我段错误在*(out + counter) = c;
。我无法弄清楚我做错了什么,还有其他人吗?
答案 0 :(得分:6)
您没有为out
分配任何值,因此它可能指向一些无效的内存地址。
您可能想要做的是先找到数据的长度,然后分配所需的内存量,然后将实际数据读入已分配的内存:
char *out;
int counter = 0;
char c = getc(fp);
while (c != '\n' && c != EOF) {
counter++;
c = getc(fp);
}
out = malloc(counter+1);
fseek(fp,0,SEEK_SET);
counter = 0;
c = getc(fp);
while (c != '\n' && c != EOF) {
*(out + counter) = c;
counter++;
c = getc(fp);
}
*(out + counter) = 0;
当你完成使用它时不要忘记free(out)
......
BTW,而不是第二个for
循环,您只需使用fgets(out,count,fp)
。