#include <stdio.h>
#include <string.h>
int main()
{
const char str[11]= "Hello World";
if(-1 > strlen(str)){
printf(str);
}
return 0;
}
此if条件应始终返回false。 但这里不是。 但是如果我把strlen(str)值放到另一个变量中,并与之进行比较,那么它就会像预期的那样工作。 我错过了什么? 是依赖于编译器还是什么?
strlen
返回无符号
类型。
它具有将-1
转换为无符号
类型的效果,该类型是一个大数字。
该数字将大于strlen
结果,因此程序控制到达if
语句体。
如果将strlen
的值分配给signed
类型的变量,并使用该变量进行比较,则将不会发生-1
的转换,而If
语句将按照您预期的方式运行。
注意,从技术上讲,代码的行为是未定义的,该字符串需要12个元素(对于nul
终止符),而不是11个元素,并且strlen
需要nul
终止符才能正常工作。 最好让编译器通过编写
const char str[] = "Hello World";