免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2165 | 回复: 3
打印 上一主题 下一主题

文件缓冲区问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-10-16 10:42 |只看该作者 |倒序浏览
有下面程序:
  1. int main()
  2. {
  3.         char *s1="12";
  4.         char *s2="34";
  5.         FILE* fp;
  6.         fp = fopen("/tmp/fwrite","w");
  7.         fwrite(s1,sizeof(s1),1,fp);
  8.         //fflush(0);
  9.         setbuf(fp,NULL);
  10.         fclose(fp);
  11.         fp = fopen("/tmp/fwrite","a+");
  12.         fwrite(s2,sizeof(s2),1,fp);
  13.         fclose(fp);
  14.         return 0;
  15. }
复制代码

cat /tmp/fwrite 为12334w
如果把setbuf换成setlinebuf,问题照旧,用fflush(0),问题照旧,如果在s1和s2后面加\n,正常,这到底是什么原因呢?

论坛徽章:
0
2 [报告]
发表于 2004-10-16 10:52 |只看该作者

文件缓冲区问题

写入的字节数应该减去1。

  1. #include <stdio.h>;

  2. int main()
  3. {
  4.    char *s1="12";
  5.    char *s2="34";
  6.    FILE* fp;
  7.    fp = fopen("/tmp/fwrite","w");
  8.    fwrite(s1,sizeof(s1)-1,1,fp);
  9.    //fflush(0);
  10.    //setbuf(fp,NULL);
  11.    fclose(fp);
  12.    fp = fopen("/tmp/fwrite","a+");
  13.    fwrite(s2,sizeof(s2)-1,1,fp);
  14.    fclose(fp);
  15.    return 0;
  16. }
复制代码


cat /tmp/fwrite 结果为1234。

论坛徽章:
0
3 [报告]
发表于 2004-10-16 11:10 |只看该作者

文件缓冲区问题

谢谢!
原来我没有搞清楚sizeof(s1)是s1这个指针的大小,是一个地址,上面的sizeof(s1)应该用strlen(s1)来代替
另外,fclose已经包括了刷新缓冲区的功能了,所以跟本不需要setbuf或者fflush了

论坛徽章:
0
4 [报告]
发表于 2004-10-16 11:28 |只看该作者

文件缓冲区问题

原帖由 "mudga" 发表:
谢谢!
原来我没有搞清楚sizeof(s1)是s1这个指针的大小,是一个地址,上面的sizeof(s1)应该用strlen(s1)来代替

真是不好意思,一段时间没有编程,我也把这个问题也搞忘记了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP