使用strlen()返回的长度和int型数字比较结果不正确

问题:

    int b = -1;
    char* t = "ll";
    if(b > strlen(t)){
        printf("Yes");
    }else{
        printf("No");
    }

在运行这段代码的时候,发现b总是大于strlen(t)的,即输出Yes。但是如果把b换成1,那么比较结果就正确了,输出No,即b < a。

我一开始以为是long型和int型的比较问题,因为编译器提醒我long型是%ld,但是打代码发现long型和int型的比较是正确的,那么请问为什么用负数和strlen()返回的数比较总是返回true呢?

strlen(t)返回的是unsigned int, 这个类型在和int比大小时,int被转成了unsigned int。

实际中一般都是用0和strlen返回值做比较的。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^