我知道为了在 C 中比较两个字符串,你需要使用 strcmp()
函数。
但我试图用 ==
运算符比较两个字符串,它起作用了。我不知道怎么做,因为它只是比较两个字符串的地址。如果字符串不同,它不应该工作。但后来我打印了字符串的地址:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char* str1 = "First";
char* str2 = "Second";
char* str3 = "First";
printf("%p %p %p", str1, str2, str3);
return 0;
}
输出是:
00403024 0040302A 00403024
Process returned 0 (0x0) execution time : 0.109 s
Press any key to continue.
str1
和 str3
怎么可能有相同的地址呢?它们可能包含相同的字符串,但它们不是相同的变量。
最佳答案
不能保证它会一直这样。通常,实现者维护一个文字池,只维护每个字符串文字一次,然后对于字符串文字的多次使用,使用相同的地址。但人们可能会以不同的方式实现它——标准对此没有任何限制。
现在您的问题是:您正在查看指向同一字符串文字的两个指针的内容。相同的字符串文字产生相同的值(它们衰减为指向第一个元素的指针)。但是由于第一段所述的原因,该地址是相同的。
另外,我会强调为 %p
格式说明符的参数提供 (void*)
类型转换。
关于c - 不同的字符串如何具有相同的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49135761/