繁体   English   中英

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

[英]Why does C == return true for equal strings?

if( "string1" == "string2" )    

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

C99基本原理对字符串文字(强调我的意思)说:

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

它是允许的,但不是必需的,因此如果程序稍有不同,则对于不同的实现或相同的实现,结果可能会有所不同。

我认为使用'if(“ string1” ==“ string2”)'比较字符串是比较指向C中字符串文字的指针。您可以参考以下文章: -C String-使用Equality Operator ==比较两个字符串平等

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”与其自身进行比较,则结果为TRUE。 第二个是比较“ 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM