修改后的文件上的意外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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...