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);
}
仍然会多一个字符,所以那个原因是错的。
阅读(2784) | 评论(0) | 转发(0) |