为什么C ==对于相等的字符串返回true?

时间:2015-06-23 15:22:00

标签: c

if( "string1" == "string2" )    

为什么这在C中有用?当字符串相等时它返回true?怎么样?例如,它在Java中不起作用,因为指针被比较。

2 个答案:

答案 0 :(得分:3)

C99理由说明了字符串文字(强调我的):

  

"此规范允许实现共享具有相同文本的字符串副本,将字符串文字放在只读内存中,并执行某些优化"。

允许但不是必需的,因此如果程序略有不同,结果可能会因实现不同或具有相同的实现而不同。

答案 1 :(得分:0)

我认为比较字符串使用' if(" string1" ==" string2")'将指针与C中的字符串文字进行比较。您可以参考以下帖子: - C String -- Using Equality Operator == for comparing two strings for equality

int main() {

    if( "string1" == "string1" ) {
        printf("Strings are equal\n");
    } else {
        printf("Strings are not equal\n");
    }

    if( "string1" == "string2" ) {
        printf("Strings are equal\n");
    } else {
        printf("Strings are not equal\n");
    }

    char* s1 = "string1";
    char* s2 = "string2";

    printf("%s = %p %s = %p\n", s1, s1, s2, s2);
    return(0);
}

上述主要功能中有两个if块。其中一个如果比较" string1"与它本身将导致真实。第二个是比较" string1"和" string2"这将导致FALSE。如果您指定字符串文字的指针并打印它们的地址,您将能够看到为什么在第一个if块中获得TRUE值,在第二个if块中您获得FALSE值。以下是输出: -

GAGUPTA2-M-40UT:Desktop gagupta2$ ./a.out 
Strings are equal
Strings are not equal
string1 = 0x105f6ef50 string2 = 0x105f6ef82