为何C语言中"-1 < strlen(s)"结果为0?与直接比较数值的差异
问题分析:
j < strlen(s)与j < 3的输出差异 示例代码
char* s =(char*) "sss"; int j = -1; printf("%d", j < strlen(s));
核心原因
这段代码输出0,但把strlen(s)换成3就输出1,本质是类型不匹配导致的隐式转换:
strlen的返回值是size_t类型,这是一个无符号整数类型(标准C中定义为对应平台的无符号整数)。- 当有符号整数
j = -1和无符号整数strlen(s)(值为3)比较时,C语言会自动把有符号的j转换成无符号类型。 - 有符号整数-1转成无符号后,会变成该类型的最大值(比如32位环境下是
0xFFFFFFFF),这个数远大于3,所以j < strlen(s)的结果是假,输出0。 - 而直接和3比较时,3是
int类型(有符号),此时-1和3都是有符号整数,-1 < 3成立,结果为真,输出1。
内容的提问来源于stack exchange,提问作者Houxiong Yao
相关产品推荐
相关产品推荐

