首页 > 解决方案 > 打开二进制文件时 fwrite() 和 fread() 如何工作

问题描述

我正在学习 C,但我不理解 fwrite() 和 fread()。

    double n;
    FILE *p;
    p = fopen("output.dat","w+b");
    rewind(p);
    fread(&n,sizeof(double),1,p);
    printf("%lf",n);
    n = 12.0;
    fwrite(&n,sizeof(double),1,p);
    fclose(p);

    return 0;

它无法按预期读写数据,请问为什么

标签: c

解决方案


花点时间检查fopen 文档中的模式表。

您会看到,w+如果文件不存在,该模式将创建一个新文件,如果文件存在,则销毁其内容。

因此,在您调用 之后fopen,您可以保证有一个空文件。您尝试做的下一件事是从中读取数据,这当然会失败。您的程序具有虚假输出(未定义的行为),因为您甚至没有测试操作是否成功并且您输出了一个未初始化的值。

也许您想要的是使用a+b开放模式。您立即致电rewind. 当然,您仍然需要处理fread首次创建此文件时的失败调用。


推荐阅读