if( "string1" == "string2" )
为什么这在C中有用?当字符串相等时它返回true?怎么样?例如,它在Java中不起作用,因为指针被比较。
答案 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