C-创建文件时使用“ w +”模式

时间:2018-08-07 20:09:08

标签: c

我正在尝试创建一个文件,将其写入,然后读取并打印出读取的内容。我正在尝试使用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;
} 

1 个答案:

答案 0 :(得分:2)

您违反了C标准的7.21.5.3 The fopen function, paragraph 7

  

以更新模式打开文件时(第二个或第三个为'+'   上面的模式参数值列表中的字符),输入和   输出可以在相关的流上执行。但是,输出   不得在没有中间调用的情况下直接输入   fflush功能或文件定位功能(fseek,fsetpos,   或快退),并且输入后不得直接输出   对文件定位功能的干预,除非输入   操作遇到文件结尾。

这可能解释了为什么while (!feof(fPointer))循环没有终止。尽管您的用法不正确,但它通常会终止。通过忽略fgets()的返回值(所有其他返回值都被忽略),您很可能会错过返回的错误。

由于您尚未提供有关实现的任何详细信息,因此外部观察者无法确定。