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
相关产品推荐
相关产品推荐

