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++相关问答推荐

定义_MISIX_C_SAL时,在MacOS上编译失败,并出现奇怪错误

我编译了一个新的c程序,并收到以下错误

编译的时候g++通常会比GCC慢很多吗?

将 struct 变量赋给自身(通过指针取消引用)是否定义了行为?

CSAPP微型shell 实验室:卡在sigprocmask

Clang警告称,`ffi_type`与`sizeof`不兼容

S的这种管道实施有什么问题吗?

FRIDA-服务器成为端口扫描的目标?

搜索使用int代替time_t的用法

为什么GCC-O1优化破解了这个代码,为了一个GameBoy高级只读存储器而修改了VRAM的循环?

如何将大写/小写土耳其字母相互转换?

从另一个宏函数调用C宏

有没有办法减少C语言中线程的堆大小?

正在try 理解C++中的`正在释放的指针未被分配‘错误

是否有单独的缓冲区用于读写库调用?

为什么会出现此错误?二进制表达式的操作数无效

C中的char**v*char[]

未使用sem_open正确初始化信号量

使用 strtok 多次分割一个字符串会导致意外行为

如何为avr atmega32微控制器构建C代码,通过光电二极管捕获光强度并通过串行通信传输数据