首页 > 解决方案 > C - 创建文件时使用“w+”模式

问题描述

我正在尝试创建一个文件,写入其中,然后读取它并打印出读取的内容。我正在尝试使用 w+ 模式,但输出给出了无限的空行。我究竟做错了什么?

 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;
} 

标签: c

解决方案


您违反了 7.21.5.3 The fopen function , C 标准的第 7 段:

当以更新模式打开文件时(“+”作为上述模式参数值列表中的第二个或第三个字符),可以在关联的流上执行输入和输出。但是,如果没有对 fflush 函数或文件定位函数(fseek、fsetpos 或 rewind)的干预调用,则输出不应直接跟随输入,并且在没有对文件定位的干预调用的情况下,输入不应直接跟随输出函数,除非输入操作遇到文件结尾。

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

由于您没有提供有关您的实施的任何细节,因此外部观察者不可能确定地知道。


推荐阅读