24
FILE* f = fopen("rajat", "w");
fputs("sometext", f);
fseek(f, 6, SEEK_SET);
fputs("is a", f);
fclose(f);

成功返回:“someteis a”

FILE* f = fopen("rajat", "a");
fputs("sometext", f);
fseek(f, 6, SEEK_SET);
fputs("is a", f);
fclose(f);

不工作。返回“sometextis a”

任何想法为什么?解决方案是什么,以便第二个代码输出与第一个完全相同?

4

1 回答 1

31

当您以追加模式打开时,文件指针在每次写入之前返回到文件末尾。您可以重新定位指针以fseek进行读取,但是一旦您调用写入文件的函数,指针就会回到文件末尾。

或者,换一种说法,为了防止数据丢失,“写指针”的位置会覆盖“读指针”的位置。任何追加后,写指针都会反弹到新的EOF.

此链接上的答案引用了 C 标准的相应部分。

"w+"如果您想写入文件中的任意位置,请使用该模式。现有文件将被覆盖。

如果您想先追加到现有文件,然后再追fseek加到任意位置,请使用"r+"后跟fseek(f, 0, SEEK_END).

于 2012-05-17T08:00:27.580 回答