如果我们有以下代码,!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;
答案 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