【发布时间】:2014-01-17 07:31:55
【问题描述】:
我知道 fgets 会一直读取到 EOF 或换行符。
我编写了一个示例代码来从文件中读取行,我观察到 fget 的执行次数超过了预期的次数。这是一个非常简单的文件,只有两个空行,即。我按了一次 Enter 并保存了文件。
下面是代码:
fp = fopen("sample.txt","r");
while (!feof(fp)) {
fgets(line,150,fp);
i++;
printf("%s",line);
}
printf("%d",i);
为什么 while 循环执行了 3 次而不是 2 次,因为文件中只有两个空行?
【问题讨论】:
-
如果您使用的是 Linux,请尝试输入
od -c sample.txt。 -
我看到这个命令有四行......虽然文件中只有两行,即只看到两行 \n..@Marian
-
我发现这个link 解释了同样的问题,但我仍然不清楚解释。如果 fgets 第三次读取 NULL,为什么会重复最后一行?此外,如果它读取第二行,缓冲区应该被清除吧? @玛丽安