微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

修改后的文件上的意外fgets行为

如何解决修改后的文件上的意外fgets行为

这是我的代码

  char a[200],b[200];
  FILE* fp = fopen("a.txt","a+");
  fprintf(fp,"abc\n");
  fflush(fp);
  fseek(fp,SEEK_SET);
  fgets(a,100,fp);
  sleep(5);
  fseek(fp,SEEK_SET);
  fgets(b,fp);
  puts(a);
  puts(b);

“ a.txt”的原始内容为“ abc”。 我执行了该程序,并在程序进入睡眠状态时将“ a.txt”的内容手动更改为“ d”。 出乎意料的是,字符数组ab均为“ abcabc \ n”,而我希望b的结果为“ d”。

我做了更多测试,结果如下:

  1. 如果使用 fread 代替 fgets ,则b的结果将为“ d”。
  2. 如果在 fgets(b)之前执行 fflush(fp),则b的结果将为“ d”。
  3. 如果在功能 fprintf 删除了“ \ n”,则b的结果将为“ d”(a为“ abcabc”)。

我对以上结果感到困惑,希望有人能解释。

我的操作环境:g ++ 4.8.5 -std = c ++ 11,linux 3.10

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。