cplusplus

size_t陷阱

上一篇 / 下一篇  2013-04-06 20:33:01 / 个人分类:VC

C语言中size_t的陷阱 作者: Demon
链接: http://demon.tw/programming/c-size_t-pitfall.html
版权: 本博客的所有文章,都遵守“署名-非商业性使用-相同方式共享 2.5 中国大陆”协议条款。
今天写了一个类似这样的程序:
#include 
#include 
int main() 
 int i = -1; 
 if(i > strlen("Demon")) 
 printf("Hello World"); 
 else printf("Hello Demon"); 
 return 0; 
}
输出的竟然是Hello World!
-1 > 5?!仔细想想,原来问题出在strlen上,strlen返回的类型是size_t,size_t的定义为:typedef unsigned int size_t;即无符号的整型,而i的类型是int,即有符号的整型。当有符号整型和无符号整型进行运算时,有符号整型会先自动转化成无符号。-1转化成无符号数为4294967295,远远大于5。今后遇到有符号数和无符号数之间的运算时要千万小心。

TAG:

 

评分:0

我来说两句

Open Toolbar