当我们在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
。根据我的理解,指针本质上是一个地址,所以achar *
是包含字符的位置的地址。那么,两个地址在这里如何相同?
因为两个地址是相同的。您的编译器在程序中包含字符串“ Hello”的一个副本,并制作了一个副本,str1
并且str2
两个副本均指向该副本。
C标准指定字符串文字可能是内存中的不同数组,也可能不是,这是未定义的事情,如果您对其进行修改以允许编译器精确地执行此操作,则可能会发生未定义的事情。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句