void main() {
    if("a" == "a")
      printf("Yes, equal");
    else
      printf("No, not equal");
}

为什么输出No, not equal

最佳答案

您正在比较的是不同字符串的两个内存地址,它们存储在不同的位置。这样做基本上看起来像这样:

if(0x00403064 == 0x002D316A) // Two memory locations
{
    printf("Yes, equal");
}

使用以下代码比较两个字符串值:
#include <string.h>

...

if(strcmp("a", "a") == 0)
{
    // Equal
}

另外,取决于您的编译器,"a" == "a"可能确实返回true,这可能会在编译时将相等的字符串合并为一个以节省空间。

比较两个字符值(不是指针)时,这是一个数字比较。例如:
'a' == 'a' // always true

关于c - 为什么在C中 “a”!= “a”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4843640/

10-12 16:01