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: