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

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

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

C
Qyouu 2019-08-01 06:01:43
使用相等运算符=比较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贡献1780条经验 获得超5个赞

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

查看完整回答
反对 回复 2019-08-02
?
墨色风雨

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

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

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


查看完整回答
反对 回复 2019-08-02
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

在……里面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-08-02
  • 3 回答
  • 0 关注
  • 378 浏览

添加回答

举报

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