fread 与 fwrite不能"混合"使用吗 (零下45度 程门立雪)

发布于 2022-10-15 10:13:39 字数 1599 浏览 96 评论 0

本帖最后由 三月廿七 于 2011-04-13 16:08 编辑

#include <stdio.h>

int main(void)
{
        FILE* fp = NULL;

        int w1 = 1, w2 = 2, w3 = 3, w4 = 4;
        int r1 = 0, r2 = 0;

        fp = fopen("file.bin", "rb+");

        if (fp == NULL)
        {
                printf("Read File error");
                return 0;
        }

        fwrite(&w1, sizeof(int), 1, fp);
        fwrite(&w2, sizeof(int), 1, fp);
       
        fseek(fp, 0, SEEK_SET);
       
        fread(&r1, sizeof(int), 1, fp);
        fread(&r2, sizeof(int), 1, fp);
       
        fwrite(&w3, sizeof(int), 1, fp);
        fwrite(&w4, sizeof(int), 1, fp);
       
                fclose(fp);
                fp = NULL;

        return 0;
}

w3, w4写不进去文件, 请高手帮忙解惑....

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

千柳 2022-10-22 10:13:39

你想写在什么位置?

待天淡蓝洁白时 2022-10-22 10:13:39

你想写在什么位置?
hellioncu 发表于 2011-04-13 16:09

假设文件已存在 并有 20个字节,  我想 w3 写在w2之后

忆沫 2022-10-22 10:13:39

改成 "r+b" 试试

染墨丶若流云 2022-10-22 10:13:39

不是写不进去。 你每次fflush 一下看看呢

归途 2022-10-22 10:13:39

标准IO,因为有缓冲的关系,读写不可混合,APUE上有说明如下:
"输出后,如未执行fflush,fseek,fsetpos,rewind函数,则不能直接输入。
输入后,如未执行fseek,fsetpos,rewind或者输入遇到EOF,则不能直接输出。"

稚然 2022-10-22 10:13:39

#include <stdio.h>

int main(void)
{
        FILE* fp = NULL;

        int w1 = 1, w2 = 2, w3 = 3, w4 = 4;
        int r1 = 0, r2 = 0;

        fp = fopen("file.bin", "rb+");

        if (fp == NULL)
        {
                printf("Read File error");
                return 0;
        }

        fwrite(&w1, sizeof(int), 1, fp);
        fwrite(&w2, sizeof(int), 1, fp);
        fflush(fp);

        //fseek(fp, 0, SEEK_SET);
        
        fread(&r1, sizeof(int), 1, fp);
        fread(&r2, sizeof(int), 1, fp);
        fflush(fp);

        fwrite(&w3, sizeof(int), 1, fp);
        fwrite(&w4, sizeof(int), 1, fp);
                fflush(fp);
        
        fclose(fp);
        fp = NULL;

        return 0;
}
恩, 这样改下确实对了...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文