我正在尝试创建一个文件,将其写入,然后读取并打印出读取的内容。我正在尝试使用w +模式,但是输出给出了无限的null行。我在做什么错了?
int main() {
FILE *fPointer;
char line[10];
fPointer = fopen("newFile.txt","w+");
fprintf(fPointer, "Hello\nWorld\n!");
while (!feof(fPointer)) {
fgets(line, 10, fPointer);
puts(line);
}
fclose(fPointer);
return 0;
}
答案 0 :(得分:2)
您违反了C标准的7.21.5.3 The fopen function, paragraph 7:
以更新模式打开文件时(第二个或第三个为'+' 上面的模式参数值列表中的字符),输入和 输出可以在相关的流上执行。但是,输出 不得在没有中间调用的情况下直接输入 fflush功能或文件定位功能(fseek,fsetpos, 或快退),并且输入后不得直接输出 对文件定位功能的干预,除非输入 操作遇到文件结尾。
这可能解释了为什么while (!feof(fPointer))
循环没有终止。尽管您的用法不正确,但它通常会终止。通过忽略fgets()
的返回值(所有其他返回值都被忽略),您很可能会错过返回的错误。
由于您尚未提供有关实现的任何详细信息,因此外部观察者无法确定。