当前位置:  开发笔记 > 前端 > 正文

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

如何解决《在MacOSX上fputs()的行为是不正常的》经验,为你挑选了1个好方法。

假设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上,它完成得很好.



1> gilez..:

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

请注意,ANSI C要求输出和输入之间的文件定位功能介入,除非输入操作遇到文件结尾.

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

因此,在这样的流上进行写入和读取操作之间进行fseek(3)或fgetpos(3)操作是一种很好的做法.

您只是看到Apple决定如何做到这一点,这是他们的权利.

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有