问题描述
这是我的代码。
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”。
出乎意料的是,字符数组a
和b
均为“ abcabc \ n”,而我希望b
的结果为“ d”。
我做了更多测试,结果如下:
- 如果使用 fread 代替 fgets ,则
b
的结果将为“ d”。 - 如果在 fgets(b)之前执行 fflush(fp),则
b
的结果将为“ d”。 - 如果在功能 fprintf 中删除了“ \ n”,则
b
的结果将为“ d”(a
为“ abcabc”)。
我对以上结果感到困惑,希望有人能解释。
我的操作环境:g ++ 4.8.5 -std = c ++ 11,linux 3.10
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)