fread 与 fwrite不能"混合"使用吗 (零下45度 程门立雪)
本帖最后由 三月廿七 于 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
你想写在什么位置?
假设文件已存在 并有 20个字节, 我想 w3 写在w2之后
改成 "r+b" 试试
不是写不进去。 你每次fflush 一下看看呢
标准IO,因为有缓冲的关系,读写不可混合,APUE上有说明如下:
"输出后,如未执行fflush,fseek,fsetpos,rewind函数,则不能直接输入。
输入后,如未执行fseek,fsetpos,rewind或者输入遇到EOF,则不能直接输出。"
#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;
}
恩, 这样改下确实对了...