不使用 strcmp() 的字符串比较

anu*_*g86 4 c string string-literals

strcmp比较字符串内容,因此优先于if (str1 == str2)比较字符串的基地址。

如果是这样,为什么if下面的 C 代码会满足条件:

    char *p2="sample1";
    char* str[2]={"sample1","sample2"};


    if(p2==str[0])
    {
            printf("if condition satisfied\n");
    }
Run Code Online (Sandbox Code Playgroud)

广东发展局:

(gdb) p p2
$1 = 0x4005f8 "sample1"
(gdb) p str[0]
$2 = 0x4005f8 "sample1"
(gdb) p &p2
$3 = (char **) 0x7fffffffdb38
(gdb) p &str[0]
$4 = (char **) 0x7fffffffdb20
(gdb) p *p2
$5 = 115 's'
Run Code Online (Sandbox Code Playgroud)

到底是什么0x4005f8以及如何打印它?

Sou*_*osh 5

未指定是否为相同的字符串文字分配不同的存储空间,或者使用相同的存储空间来指示字符串文字的所有用法。

在您的情况下,字符串文字"Sample1"只有一份副本,并且将相同的地址分配给p2str[0]。然而,标准并不保证这一点。

引用C11,第 6.4.5 章

如果这些数组的元素具有适当的值,则未指定这些数组是否不同。[...]