`

《C陷阱与缺陷》-2

 
阅读更多

4、整数溢出
(1)无符号数(0、+),不可能发生溢出,当它超过范围时,从0开始重新计数
有符号数(-、0、+),可能发生溢出,并且“溢出”的结果不固定
(2)当一个无符号数和有符号数相加的时候,有符号数自动转化为无符号数
(3)判断溢出
方法一:强制转换成无符号数
if( (unsigned) a + (unsigned) b > INT_MAX )
fun();
方法二:利用(2)判断溢出
if( a > INT_MAX -b )
fun();
(5)常用误区
方法一:无符号数运算结果为无符号数,无符号数始终大于等于0
if( i - j >= 0)假设i和j都为无符号数,则可能引起错误,这个式子始终成立,因为无符号数始终大于等于0
方法二:strlen返回的是无符号数
if(strlen(b)-10>=0)这个式子始终成立(牛!!!!!),正确写法如下:if( strlen(a) >= 10 )
参考见http://blog.sina.com.cn/s/blog_62714d6a0100l0dc.html(C语言中的 整数溢出)


5、getchar异常情况
char c;
while((c = getchar()) != EOF)
putchar(c);
getchar函数在一般情况下返回的是标准输入文件中的下一个字符,当没有输入时返回EOF。
用char来存放getchar的返回值,则会发生截断,发生各种不可预知的结果。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics