簡體   English   中英

fread() 在 C 中 fseek() 和 fwrite() 后不起作用

[英]fread() not working after fseek() with fwrite() in C

在我的程序中,我制作了一個包含結構體的二進制文件(每個結構體包含一個整數)……我在文件中放入了 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);

     }`

但是...我在標准輸出文件中的輸出是:1 2 2

應該是 1 2 3

但是...當我添加 fseek(myfile,0,SEEK_CUR); 在 fwrite(&x,sizeof(x),1,myfile);....之后它運行正確並輸出:1 2 3

誰能幫我 ???

您只需要告訴程序將寫入模式切換到讀取模式即可

fseek(myfile,0,SEEK_CUR); 

如果您不這樣做,則有必要,您只會得到相同的結果而根本沒有改變,否則您可能會陷入無限循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM