什么时候!strcmp(a,b)评估为真?

时间:2016-06-26 18:29:54

标签: c

如果我们有以下代码,!strcmp(a,b)的含义是什么?我知道如何使用strcmp(a,b),我知道如果a = b,它会返回0,如果a<b返回-1,并且a>b它返回1!符号应取消该功能,因此以下代码何时返回i?我很困惑。

 for(i=1;i<var;i++) 
     if(!strcmp(s,anotherVar[i]))
         return i;   

2 个答案:

答案 0 :(得分:2)

考虑数值实际意味着什么。将数字视为布尔条件时,0将被评估为false;其他任何内容都被评估为true。因此,!0评估为true,而!n评估为false的所有非零值n

换句话说,当!strcmp(s,anotherVar[i])s相同时(anotherVar[i]返回strcmp),0为真,但如果不{} (因为strcmp返回非零值。)

这是a live, online demo,使用以下代码:

#include <stdio.h>

int main(void) {
    char * a = "hello";
    char * b = "world";
    char * c = "hello";

    if (!strcmp(a,b)) {
        printf("true for a and b\n");
    } else {
        printf("false for a and b\n"); // this runs
    }

    if (!strcmp(a,c)) {
        printf("true for a and c\n"); // this runs
    } else {
        printf("false for a and c\n");
    }

    return 0;
}

输出结果为:

false for a and b
true for a and c

答案 1 :(得分:1)

如果!strcmp返回true

strcmp将返回0

if(0) //false 
if(4) //true