删除第二个条目奇怪的行为后,getline读取具有单个条目的文件

时间:2016-05-12 18:35:58

标签: c

我使用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;
}

1 个答案:

答案 0 :(得分:0)

Getline读取所有内容,直到看到行尾字符。您必须确保您没有在删除的行中留下结束字符。你可以通过按退格键来实现这一点。