Chinaunix首页 | 论坛 | 博客
  • 博客访问: 230426
  • 博文数量: 32
  • 博客积分: 2318
  • 博客等级: 大尉
  • 技术积分: 298
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-14 01:07
个人简介

新博客: http://qinchuan.me

文章分类
文章存档

2012年(2)

2011年(7)

2010年(6)

2009年(8)

2008年(9)

分类: C/C++

2008-07-25 23:54:20

    while(!feof(in)) fputc(fgetc(in),out);多一个字符的原因是:当!feof(in) == 0 时也进行了一次 fputc();的操作,导致将文件结束符也复制过去了。
    把上面的语句改为:
    int ch,flag;
    while(!feof(in))
    {
     ch = fgetc(in);
     flag = (!feof(in));
     if( flag == 1) fputc(ch,out);
    }
就可以解决。

 PS:上面表述的原因是错的,而且while也拼错了。这篇文章放了很久了,大大们看了没指出。feof()读取到EOF时也不返回非零值,只有到无东西可读时才会非零。这才是症结所在。
上面的语句改后有效是,fgetc(in)放在了flag = (!feof(in));里feof之前。当ch为EOF时,再执行feof(in)则文件已经到无物可读了。
假如把后面的程序改成
    while(!feof(in))
    {
     flag = (!feof(in));
     if( flag == 1) fputc(fgetc(in),out);
    }
仍然会多一个字符,所以那个原因是错的。
阅读(2790) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~