[英]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.