char ch;
while((ch = getchar()) != EOF){
putchar(ch);
}
上面的代码显然应该复制我的输入。对于基本的ASCII文本文件,它确实有效。
但是,如果我发送一个gif,特别是这个,但适用于大多数(http://www.cs.utexas.edu/~peterson/prog2/smile.gif),那么当我将stdin重定向为gif,stdout重定向到任何文件类型,并运行diff原创和新的,错误丰富。在这种情况下,超过一半的文件甚至没有处理,它只是退出。 有线索吗?我愿意切换到另一个输入/输出功能,只要我一次可以输入一个字节。
答案 0 :(得分:4)
getchar
会返回int
,而非char
。区别很重要,因为它可能返回EOF
,这是一个不能成为char的值。
如果将getchar
的返回值转换为char
,则无法可靠地测试EOF。当你点击值为(char)EOF
的字符时,循环将终止。
通过将ch
声明为int
来修复此问题。