首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >const *和char[] (char数组)

const *和char[] (char数组)
EN

Stack Overflow用户
提问于 2022-02-18 14:44:15
回答 3查看 148关注 0票数 0
代码语言:javascript
复制
int main(){
  const char *a[] = {"zero","one"};
  char b[] = "zero";
  bool c = b==a[0];
}

为什么bool值是zero,因为我传递了相同的字符串,以及如何使它成为1

EN

回答 3

Stack Overflow用户

发布于 2022-02-18 14:55:19

const char *a[] = {"zero","one"};创建两个数组,一个填充“零”字符,然后是空字符,另一个数组填充“一个”字符,后面是空字符,并将a[0]设置为指向第一个数组的第一个元素,将a[1]设置为指向第二个数组的第一个元素。

char b[] = "zero";创建一个数组,并将其填充为“零”和一个空字符。

b==a[0]将数组b转换为指向其第一个元素的指针,并将该指针与指针a[0]进行比较。由于这些数组指向不同的数组,因此==操作的计算结果为false (零)。这两个数组包含相同数据的事实与此无关。指针是比较的,而不是数组内容。

要比较两个字符串,可以使用在头std::strcmp中声明的<cstring>std::strcmp(b, a[0])返回零当且仅当两个字符串是相同的。只有当两个字符串相同时,bool c = std::strcmp(b, a[0]) == 0;才会将c设置为true。

(如果第一个字符串“小于”第二个字符串,则std::strcmp返回一个负数,其中“小于”表示第一个字符串中的字符代码低于第二个字符串中的字符代码,并将这些字符作为unsigned char值。如果第一个字符串大于第二个字符串,则返回一个正数。)

票数 5
EN

Stack Overflow用户

发布于 2022-02-18 14:54:06

当在char*或任何其他指针上调用char*时,在C++中,您将测试这两个指针是否指向同一个对象。

a[0]b指向不同的字符。因此,结果将是错误的。

如果要比较内容,则需要使用strcmp,或者更好地使用std::string并在其上使用==

P.S.:我跳过了字符数组衰减为指针的部分。您可以稍后再讨论这个概念。

票数 1
EN

Stack Overflow用户

发布于 2022-02-18 14:59:49

问题是,你要做的不是比较两个字符串,而是比较两个地址。当您比较b和a时,它开始比较它们的地址,地址意味着值驻留在内存中的物理地址明显不同,这就是它返回0的原因。

您需要的是strcmp函数,它接受两个字符指针并返回字符串本身是否相同/相等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71175341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档