This question already has answers here:
“strlen(s1) - strlen(s2)” is never less than zero
                                
                                    (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_tC中未签名。因此,比较为负将产生一个正数。 (带符号数的符号扩展位在无符号情况下会产生较大的值)。然后将该值与0进行比较-如果为true,它将进入第一个条件。输出3。

即使您从C删除无符号,strlen减法的结果也会产生一个正数,该正数远大于0。这就是为什么总是得到3的原因。

关于c - 代码说明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47779514/

10-14 14:48