【问题标题】:Why does "==" return true for character pointers? [duplicate]为什么“==”对字符指针返回true? [复制]
【发布时间】:2018-11-21 03:32:08
【问题描述】:

当我们在 C 中比较字符串时,我们小心使用strcmp(或它的其他变体)来进行相等检查。例如,如果一个字符串是char hello1[7] = "hello!",另一个字符串是char hello2[7] = "hello!",我们可以使用strcmp检查它们的内容是否相等。但是,我们不能使用==,因为== 会比较每个数组的第一个元素的地址(由于数组衰减),这总是错误的。

那么为什么当我尝试比较两个char *== 时,结果是真的?例如:

int main() {
  char *str1 = "Hello";
  char *str2 = "Hello";

  if (str1 == str2) {
    printf("equal\n");
  } else {
    printf("not equal\n");
  }
}

这将打印equal。根据我的理解,指针本质上是一个地址,因此char * 是包含字符的位置的地址。那么这里的两个地址怎么会一样呢?

【问题讨论】:

  • 字符串文字经常被“合并”,因此任何给定字符串只有一个副本。检查指针值。
  • 感谢您的快速响应!不知何故,当我搜索时,我找不到这些帖子,但它们非常有帮助!

标签: c string


【解决方案1】:

因为这两个地址是一样的。您的编译器在您的程序中包含了字符串“Hello”的一份副本,并使str1str2 都指向它。

C 标准指定 string literals might or might not be distinct arrays in memory, and that undefined things might happen if you modify them 是为了让编译器能够做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-10
    • 2012-04-12
    • 2014-12-20
    • 2015-06-22
    • 2011-12-14
    • 2015-10-07
    相关资源
    最近更新 更多