C语言 while((ch=getchar())!=EOF) 的问题

  • A+
所属分类:安全博客

以前,经常使用while((ch=getchar()!=EOF)来作为程序读取输入的结束。
但是,今天发现,这个EOF的类型是整形。
然而,我们经常是将ch定义为字符型:char ch;
这样就造成了一个问题:getchar()读取输入的EOF的时候,读取的是整形数。然而,这个数字比char类型(-128~127)要大.所以,getchar()在赋值给ch的时候,会造成该数值被截短的现象。然后ch经过提升为整形之后再与EOF作比较的时候是不会相等的。
这就有可能使得程序在输入EOF的时候并不会停止。或者是在键入377的时候,注入终止(因为这个值截短再提升之后与EOF相等)。
基于以上原因,我们就要避免使用

while((ch=getchar())!=EOF)

FROM :rickyhao.com | rickyhao.com

相关推荐: Flare-on Challenge 2017 部分题解

Flare-on Challenge 2017 部分题解 Last updated:Oct.22, 2017 CST 18:38:42 Flare-on Challenge 2017 部分题解 ROT13 Igniteme Greektome Notepad …

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: