《C和指针》中关于EOF的问题

来源:互联网 发布:海康网络视频解码器 编辑:程序博客网 时间:2024/04/28 20:56

问题来源:《C和指针》P70

在这页中,有这样一段代码,它在某些情况下会爆错误,而这些错误也是我之前没有关注过的。

char ch;...while( (ch=getchar()) != EOF)...
  1. ch是char类型,占8bit,而getchar()返回int,为32bit。因此,将getchar()取得的值强转为char类型必然会截去一部分,当把这个值与EOF做比较时,系统又会将8bit扩充为32bit。在这个过程之中,如果前面的24bit有值不全为0的话,必然会面临数据不一致。
  2. 由于EOF定义为-1,在无符号字符集的机器中运行时,永远都不会相等,因此循环会永远进行下去。
0 0
原创粉丝点击