0

我在 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);
   }
}

如果这段代码之后我

fseek(gfp, 0, SEEK_SET);
fread(&filebx, sizeof(filebx), 1, gfp);
fread(&fileby, sizeof(fileby), 1, gfp);
fprintf(stderr, "%f %f", filebx, fileby);

我的输出是

1000 15000

对于前两个,这是预期的。

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

14000 14000

不管我做什么。我一直在努力解决这个问题......有人知道我做错了什么吗?

4

1 回答 1

5

从已以写入模式打开的流中读取是未定义的行为。你应该做到:

gfp = fopen(gridfiles, "wb+");

如果您打算同时阅读和写作。

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

于 2012-10-26T16:54:39.210 回答