为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
慕侠2389804 2019-07-17 18:11:23
使用相等运算符=比较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字符串呢?
查看完整描述

3 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

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


查看完整回答
反对 回复 2019-07-17
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

您不能将C中的字符串与=进行比较,因为C编译器实际上并不了解字符串以外的字符串。

编译器看到与char*在任何一方,它都进行指针比较(比较存储在指针中的地址)。


查看完整回答
反对 回复 2019-07-17
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

在……里面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" */;


查看完整回答
反对 回复 2019-07-17
  • 3 回答
  • 0 关注
  • 713 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信