关于C语言strlen函数的比较问题:直接与赋值后比较结果不同
问题原因解析
先看你的代码片段:
char string[] = {"1234"}; int len = strlen(string); int bool; bool = -1 < strlen(string); printf("%d",bool); //bool=0 bool = -1 < len; printf("%d",bool); //bool=1
问题的核心是**strlen的返回类型是无符号整数**:
- C标准里,
strlen的返回值是size_t类型,这是一个专门用来表示长度的无符号整数类型(通常和unsigned int或unsigned long对应)。 - 当你直接写
-1 < strlen(string)时,C语言会自动触发隐式类型转换:有符号的-1会被转换成size_t类型的无符号数。转换后,-1会变成size_t能表示的最大值(比如32位系统下是0xFFFFFFFF),这个数远大于strlen("1234")的结果4,所以比较结果为假,输出0。 - 而把
strlen的结果赋值给int len时,size_t类型的4被转换成有符号的int,此时-1和len都是有符号整数,-1 < 4显然成立,输出1,符合你的预期。
如果要直接和strlen比较得到正确结果,可将strlen的结果强制转换为有符号整数:-1 < (int)strlen(string),这样逻辑就和赋值给int后一致了。
内容的提问来源于stack exchange,提问作者chaganhu
相关产品推荐
相关产品推荐

