【发布时间】: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 * 是包含字符的位置的地址。那么这里的两个地址怎么会一样呢?
【问题讨论】:
-
字符串文字经常被“合并”,因此任何给定字符串只有一个副本。检查指针值。
-
感谢您的快速响应!不知何故,当我搜索时,我找不到这些帖子,但它们非常有帮助!