fread()在fseek()之后使用f中的fwrite()不起作用

时间:2015-05-29 09:45:07

标签: c struct fwrite fread fseek

在我的程序中,我创建一个二进制文件包含结构(每个结构包含一个整数)...我在文件中放入3个结构...我想先创建文件...然后关闭它...然后重新打开它作为" rb +"模式...我想从文件中读取结构并更改其值(成员数据)并以相同的方式在同一文件中重写:

#include <stdio.h>
main()
     {
         int i;

         struct
         {
             int data;
         }x;  

         FILE* myfile=fopen("d:\\text.bin","wb");

         for(i=1;i<4;i++)
         {
              x.data=i;
              fwrite(&x,sizeof(x),1,myfile);
         }

         fclose(myfile);

         myfile=fopen("d:\\text.bin","rb+");

         for(i=0;i<3;i++)
         {
              fread(&x,sizeof(x),1,myfile);
              printf("%d\n",x.data);
              fseek(myfile,-sizeof(x),SEEK_CUR);
              x.data=2*x.data;
              fwrite(&x,sizeof(x),1,myfile);
         }

         fclose(myfile);

     }`

但是...我在stdout文件中的输出是: 1 2 2

它应该是 1 2 3

但......当我添加fseek(myfile,0,SEEK_CUR);在fwrite(&amp; x,sizeof(x),1,myfile)之后; ....它正确运行并输出: 1 2 3

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

您只需要告诉程序将写入模式切换到读取模式,这样

fseek(myfile,0,SEEK_CUR); 

如果你没有获得相同的结果而没有任何改变,那么这是必要的! 或者你可能会得到一个无限循环!