Hou*_*Yao -1 c integer strlen comparison-operators implicit-conversion
char* s =(char*) "sss";
int j = -1;
printf("%d", j < strlen(s));
Run Code Online (Sandbox Code Playgroud)
j < 3主要是关于和之间的区别j < strlen(s)。
在上面的代码中,printf()函数打印0,但是如果我改为strlen(s)3,结果就变成1(正如我所期望的那样)。
原因是什么?
的返回类型strlen是size_t,它是无符号整数类型。当比较 asize_t和 an时int,应用“通常的算术转换”。在这种情况下,这意味着int操作数 ie-1被转换为 a size_t,从而产生最大的可能size_t值,该值大于该strlen值。