This question already has answers here:
“strlen(s1) - strlen(s2)” is never less than zero
(3个答案)
2年前关闭。
代码的输出为3?请解释。根据我的说法应该是
5.删除“ unsigned”后,我仍然得到输出为3。
(3个答案)
2年前关闭。
代码的输出为3?请解释。根据我的说法应该是
5.删除“ unsigned”后,我仍然得到输出为3。
#include<stdio.h>
#include<string.h>
void main(){
unsigned int c=0;
int len;
char x[20]="abc";
char y[20]="defgh";
if((strlen(x)-strlen(y))>c)
len=strlen(x);
else
len=strlen(y);
printf("%d",len);
}
最佳答案
因为size_t
在C
中未签名。因此,比较为负将产生一个正数。 (带符号数的符号扩展位在无符号情况下会产生较大的值)。然后将该值与0
进行比较-如果为true,它将进入第一个条件。输出3。
即使您从C
删除无符号,strlen
减法的结果也会产生一个正数,该正数远大于0。这就是为什么总是得到3的原因。
关于c - 代码说明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47779514/
10-14 14:48