假设test.txt是这样的:
aaaaa
aaaaa
aaaaa
测试代码是这样的:
#include#include #include int main() { FILE *f = fopen("test.txt", "r+"); char buf[100]; fgets(buf, 100, f); fputs("bbb", f); fclose(f); return 0; }
当然,我的意图是结果文件可能是这样的:
aaaaa
bbbaa
aaaaa
但在MacOSX上,它是这样的:
aaaaa
aaaaa
aaaaa
bbb
fputs()不会返回任何错误,并且在fgets()之后放置ftell()时,它会完全指向6.
那是一个错误吗?在Linux上,它完成得很好.
引用http://man7.org/linux/man-pages/man3/fopen.3.html:
请注意,ANSI C要求输出和输入之间的文件定位功能介入,除非输入操作遇到文件结尾.
如果你不这样做,你就会陷入"未定义的行为"领域,即任何事情都可能发生.所以,继续引用:
因此,在这样的流上进行写入和读取操作之间进行fseek(3)或fgetpos(3)操作是一种很好的做法.
您只是看到Apple决定如何做到这一点,这是他们的权利.