gpt4 book ai didi

c - fputs() 在 MacOSX 上的行为不正常

转载 作者:行者123 更新时间:2023-12-01 06:23:26 28 4
gpt4 key购买 nike

假设test.txt是这样的:

aaaaa
aaaaa
aaaaa

测试代码是这样的:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

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() 不返回任何错误,当 ftell() 放在 fgets() 之后时,它正好指向 6。
那是一个错误吗?在 Linux 上,它做得很好,如我所愿。

最佳答案

引用 http://man7.org/linux/man-pages/man3/fopen.3.html :

Note that ANSI C requires that a file positioning function intervene between output and input, unless an input operation encounters end-of-file.

如果你不这样做,你就会进入“未定义行为”的领域,即任何事情都有可能发生。所以,继续引用:

Therefore it is good practice [...] to put an fseek(3) or fgetpos(3) operation between write and read operations on such a stream.

您只是看到了 Apple 是如何决定这样做的,这是他们的权利。

关于c - fputs() 在 MacOSX 上的行为不正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34094545/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com