他这个代码写的有点小问题, feof() 函数返回的是最后一次读出后流是否结束,而不是流是否已经到达终点(即下次读出会遇到EOF)。所以fgetc最后会遇到一个EOF,即-1,多出来的一个字符不是空格,其内容就是-1的char,即0xFF。正确的代码应该这样改。
ch = fgetc(in);
while(!feof(in))
{
fputc(ch,out);
putchar(ch);
ch = fgetc(in);
}
再随便说一句,谭的书还是别看了,误人子弟的书。
就是while(!feof(in))的问题,只要in的文件指针还没有指向EOF,下面的读写就执行。直到把-1读出来写到outfile里面,这时候in指向EOF,循环结束。那个-1就是多出来的空格(我这里是个y上面加两个点)。
fgetc的原型是int fgetc(FILE *stream);
建议int ch;这样定义
while(!feof(in))
{
ch = fgetc(in);
if(ch==EOF) break;/*这样试试看,怀疑文件尾时,ch是-1,其实不管怎么样,这时候不需要输出ch了*/
fputc(ch,out);
putchar(ch);
}