请问使用相等运算符=比较C中的两个字符串是否相等

使用相等运算符=比较C中的两个字符串是否相等

int main (int argc, **argv){
       if (argv[1] == "-hello")
            printf("True\n");
       else
            printf("False\n");}
# ./myProg -hello
False

为什么?我意识到strcmp(argv[1], "-hello") == 0返回真实.。但是为什么我不能使用相等运算符来比较两个C字符串呢?


Qyouu
浏览 379回答 3
3回答

翻阅古今

因为argv[1](例如)实际上是指向字符串的指针。所以你所做的只是比较指针。

墨色风雨

您不能将C中的字符串与=进行比较,因为C编译器实际上并不了解字符串以外的字符串。编译器看到与char*在任何一方,它都进行指针比较(比较存储在指针中的地址)。

德玛西亚99

在……里面C因为,在大多数上下文中,数组“衰减为指向其第一个元素的指针”。所以,当你有一个数组"foobar"在大多数情况下,它会退化为指针:if (name == "foobar") /* ... */; /* comparing name with a pointer */你想让它比较数组的内容带着某物..你可以手动完成if ('p' == *("foobar")) /* ... */; /* false: 'p' != 'f' */if ('m' == *("foobar"+1)) /* ... */; /* false: 'm' != 'o' */if ('g' == *("foobar"+2)) /* ... */; /* false: 'g' != 'o' */或自动if (strcmp(name, "foobar")) /* name is not "foobar" */;
打开App,查看更多内容
随时随地看视频慕课网APP