Think about what the numeric values actually mean. When you treat a number as a Boolean condition, 0
is evaluated as false
; anything else is evaluated astrue
. So !0
evaluates as true
, while !n
evaluates as false
for all non-zero values of n
.
Put differently, !strcmp(s,anotherVar[i])
is true when s
and anotherVar[i]
are the same (because strcmp
returns 0
), but false when they aren’t (because strcmp
returns a non-zero value).
Here’s a live, online demo, using the following code:
#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;
}
The output is:
false for a and b
true for a and c
2
solved When does !strcmp(a,b) evaluate as true?