在《VBS For Next循环的一些细节》中说到了 For Next 循环的控制变量仅仅在循环开始前求值一次,但是其中存在一处陷阱。
文章关键字 ‘陷阱’
VBS For Next循环的陷阱
2012年02月10日,星期五C语言中size_t的陷阱
2010年11月26日,星期五今天写了一个类似这样的程序:
#include <stdio.h> #include <string.h> 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。
今后遇到有符号数和无符号数之间的运算时要千万小心。