You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中使用三目运算符比较char数组与字符串不生效的原因是什么

问题根本原因

  • 你代码里的name == "Shah Bhuiyan"比较的不是两个字符串的内容,而是两个指针的内存地址:
    • name作为char数组名,在参与运算时会隐式转换为指向数组首元素的指针,指向栈上你分配的1000字节数组的首地址
    • 字符串常量"Shah Bhuiyan"存储在程序的只读数据段,它的指针指向只读数据段的对应地址
    • 两个地址必然不相等,所以判断永远走false分支,输出Who is this?

修复方案

有两种常用的修复方式:

方案1:改用C风格字符串比较函数

包含<cstring>头文件,调用strcmp函数比较内容,strcmp返回0代表两个字符串内容相等:

#include <iostream>
#include <cstring>   

int main()
{
    char name[1000];
    std::cout << "What is your name?\n";
    std::cin.get(name, 50);

    strcmp(name, "Shah Bhuiyan") == 0 ? std::cout << "Okay, it's you\n" : std::cout<< "Who is this?\n";
}

方案2:改用C++ std::string类型(更推荐)

std::string重载了==运算符,可以直接比较字符串内容,写法更简洁也更安全,不需要手动处理数组长度:

#include <iostream>
#include <string>   

int main()
{
    std::string name;
    std::cout << "What is your name?\n";
    std::getline(std::cin, name);

    name == "Shah Bhuiyan" ? std::cout << "Okay, it's you\n" : std::cout<< "Who is this?\n";
}

内容的提问来源于stack exchange,提问作者Shah Jacob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:09:00