【发布时间】:2017-05-21 00:42:18
【问题描述】:
这是 getline 手册页中的代码 sn-p ,它工作得很好。
FILE* fp;
size_t len = 0;
char* line = NULL;
ssize_t read;
fp = fopen("test.txt", "r");
while ((read = getline(&line, &len, fp)) != -1) {
printf("Retrieved line of length %zu :\n", read);
printf("%s", line);
}
但是,当我尝试从行变量中访问单个字符时,例如:
while ((read = getline(&line, &len, fp)) != -1) {
printf("Retrieved line of length %zu :\n", read);
printf("%s", line);
printf("%s", line[0]);
}
我遇到了分段错误(核心转储)错误。
【问题讨论】:
-
我遇到了分段错误(核心转储)错误。在哪一行?您是否尝试在调试器中运行?提示:检查每个函数调用的返回值...
-
printf("%s", line[0]);这一行,删除它会使程序再次运行 -
我不确定
getline是否在末尾添加了正确的空终止符。如果line不是以 null 结尾的,printf("%s",line)将读取到line数组的末尾,到达无效内存并导致访问冲突。 -
printf("%s", line[0]);这条线,删除它使程序再次工作 现在有一个线索。
line[0]到底是什么? -
@AndrewHenle 好吧,他已经说过了:)