在C语言中读取二进制文件的奇异性

在C语言中读取二进制文件的奇异性,c,pointers,file-io,binaryfiles,file-pointer,C,Pointers,File Io,Binaryfiles,File Pointer,我在C中定义了这样的二进制文件 FILE *gfp; gfp = fopen(gridfiles, "wb"); 变量gridfiles存储文件名,前面已经定义过。现在我将两个变量写入文件 for(yy = 0; yy < nfiley; yy++) { for(xx = 0; xx < nfilex; xx++) { filebx = beguv + xx*1E3; fileby = enduv - yy*1E3; fwrite(&

我在C中定义了这样的二进制文件

FILE *gfp;
gfp = fopen(gridfiles, "wb");
变量gridfiles存储文件名,前面已经定义过。现在我将两个变量写入文件

for(yy = 0; yy < nfiley; yy++) {
   for(xx = 0; xx < nfilex; xx++) {
      filebx = beguv + xx*1E3;
      fileby = enduv - yy*1E3;
      fwrite(&filebx, sizeof(filebx), 1, gfp);
      fwrite(&fileby, sizeof(fileby), 1, gfp);
   }
}
我的输出是

1000 15000
14000 14000
对于前两个,这是意料之中的

但是,如果在编写了一些其他代码(根本不涉及这些文件)之后,我重复fseek()等等,我的输出是

1000 15000
14000 14000
不管我做什么。 我想弄明白这件事已经有一段时间了。。。有人知道我做错了什么吗?

这是从以写模式打开的流中读取。你应该做到:

gfp = fopen(gridfiles, "wb+");
如果你打算读和写

此外,正如@Kyle Jones在上面的评论中指出的,在执行文件I/O时,您应该养成检查
fread
/
fwrite
的返回状态的习惯-这会更早发现您的问题。

这是从以写模式打开的流中读取。你应该做到:

gfp = fopen(gridfiles, "wb+");
如果你打算读和写


此外,正如@Kyle Jones在上面的评论中指出的那样,在执行文件I/O时,您应该养成检查
fread
/
fwrite
返回状态的习惯-这会更早发现您的问题。

您是否适当地调用
fflush
?我刚刚添加了它并再次运行了它。。。同样的结果!fflush()不适用于fread,是吗?您知道从以写模式打开的文件中读取是很困难的,对吗?您应该将其设置为
fopen(gridfiles,“wb+”)如果你打算同时读写。@PaulR-太糟糕了,我只有一票赞成票。你真棒!谢谢没问题-如果这已经解决了问题,我会给出一个答案。您是否适当地调用
fflush
?我刚刚添加了它,然后再次运行它。。。同样的结果!fflush()不适用于fread,是吗?您知道从以写模式打开的文件中读取是很困难的,对吗?您应该将其设置为
fopen(gridfiles,“wb+”)如果你打算同时读写。@PaulR-太糟糕了,我只有一票赞成票。你真棒!谢谢没问题-如果这已经解决了问题,我会回答的。