如何解决修改后的文件上的意外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”。
出乎意料的是,字符数组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 举报,一经查实,本站将立刻删除。