今天练习代码的时候碰见这样一个问题:

一个文件test.txt,文件内容为

1

2

4

5

在程序中读写这个文件,修改其内容,添加一行,将文件内容变成:

1

2

3

4

5

楼主的错误代码是这样的:

 #include<stdio.h>
#include<string.h> int main(int argc, const char *argv[])
{
FILE *fp,*fd;
fp = fopen("text.txt","r");
fd = fopen("text1.txt","w");
char a;
int line=;
while((a=(char)fgetc(fp)) > )
{
fputc(a,fd);
if(a == '\n')
{
line++;
if(line==)
{
fputc('',fd);
fputc('\n',fd);
}
}
}
// fflush(fp);
// fflush(fd);
close(fp);
close(fd);
printf("re\n");
if((fp = fopen("text.txt","w")) == NULL)
{
printf("fp error\n");
return -;
}
if((fd = fopen("text1.txt","r")) == NULL)
{
printf("fd errpr\n");
return -;
}
while((a = (char)fgetc(fd)) > )
{
printf("enter\n");
fputc(a,fp);
}
printf("%d\n",a);
close(fp);
close(fd);
return ;
}

这样编译运行,text1.txt 中 的内容是 1 2 3 4 5

但是text.txt 中会没内容。笔者烦恼了一会,之后想起来,标准IO是带缓冲区的,应该是缓冲区这里出毛病了,在程序中加了刷新缓冲区,程序就正常了。(就是将上述程序中的两个注释去掉就可以了。)

原因如下:采用标准IO打开文件采用的是全缓冲区,等到程序结束 或者 缓冲区满 或者 手动刷新才会将缓冲区中的内容取出。

在第一次打开并读取完text.txt时,缓冲区的内容是这样  1 \n 2 \n 4 \n 5 \n -1(这里负一代表文件末尾了,具体解释请  MAN  fgetc),在关闭IO流之后(未刷新),在打开IO流,缓冲区中的数据依然存在,此时在读取text1.txt中的数据,笔者猜测缓冲区的数据应该是这样的  1\n 2\n 4\n 5\n -1,因为之前读到  -1时并没有在往下读数据了,此时缓冲区的位置符仍然停留在-1处,在第二次读取时直接读的负一然后循环就不执行了,就无法向text.txt中赋值数据,又因为text.txt是写打开的,所以里面就会没有数据。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

找到问题了,因为标准IO有缓冲区,实际上在程序运行时,并没有将数据写入TEXT1.TXT   也就是说其中并没有内容。之所以最后在text1.txt中看到了数据,是因为程序结束了,缓冲区中的数据才写入了text1.txt。

最新文章

  1. Android Monkey压力测试
  2. Block 使用注意点
  3. 不写完不回家的TreeSet
  4. Linux手动释放缓存的方法
  5. js兼容性记录
  6. Java package详解
  7. Django视图与网址传参
  8. 教师投票系统(JSP+MySQL)
  9. jquery获取父窗口的元素[转]
  10. Spring声明式事务配置详解
  11. javascript——10章 DOM
  12. web安全防范之SQL注入攻击、攻击原理和防范措施
  13. element ui 时间控件 多个日期
  14. Zookeeper入门(一)之概述
  15. 【C#】自定义新建一个DataTable(3列),循环3维矩形数组往其填充数据
  16. JSOI 2017 Round 1滚粗记
  17. 一次安装win10 ubuntu16.0经过记录
  18. ASP.NET MVC4 新手入门教程之九 ---9.查询详情和删除方法
  19. 巨蟒python全栈开发flask4
  20. 通过html()的方法获取文本内容, form表单组件显示的值与获取到的值不一致的问题

热门文章

  1. dedecms 模板文件不存在 无法解析文档!问题定位方法!
  2. JSP中include动作与指令
  3. Linux --Apache服务搭建
  4. npm 安装axios和使用增删改查
  5. matlab中换行
  6. Arcgis Javascript中geometryEngine报错’hq‘of undefined的解决方法
  7. bzoj2111 [ZJOI2010]排列计数
  8. 「bzoj3687: 简单题」
  9. LOJ 2172 「FJOI2016」所有公共子序列问题——序列自动机
  10. intellig idea中jsp或html数据没有自动保存和更换字体