我使用getline来读取文件。它完美无缺,除了一个奇怪的行为,我无法弄清楚为什么。考虑以下代码。现在test.txt是一个包含单个条目的文件,例如1.我使用以下代码,我得到了所需的结果,即getline读取条目1.现在我添加另一个条目说2现在文件test.txt包含条目1和2 ,getline按预期读取这两个条目。但是现在当我从test.txt中删除第二个条目2并再次运行代码时,getline会读取一个额外的行。我不知道为什么。现在,如果我删除旧文件test.txt并创建一个只有一个条目1的新文件test.txt,则以下代码可以正常工作。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fp;
char *line = malloc(100*sizeof(char));
size_t len = 100;
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);
}
return 0;
}
答案 0 :(得分:0)
Getline读取所有内容,直到看到行尾字符。您必须确保您没有在删除的行中留下结束字符。你可以通过按退格键来实现这一点。