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

C++使用strcmp比较字符串时无法将std::__cxx11::string转为const char*错误怎么办

报错原因
  1. strcmp是C标准库提供的字符串比较函数,仅接受const char*类型的入参,你代码中statename数组的元素是std::string类型,编译器无法完成隐式类型转换,因此触发类型转换报错。
  2. 头文件引入错误:你当前引入的<string.h>是C语言字符串操作的头文件,要使用std::string需要引入C++的<string>头文件,否则部分编译器也会抛出未定义类型的错误。
  3. 代码存在两处逻辑隐患:
    • 用cin >> statecheck读取输入时,遇到空格就会截断,无法匹配到带空格的州名(比如andhra pradesh)
    • for循环内的跳转逻辑错误,只要第一个州名匹配失败就会直接提示重输,不会遍历剩余的27个州名
修复方案

方案1:保留strcmp调用

调用std::string类提供的c_str()方法,获取其对应的C风格字符串指针再传入strcmp,修改报错行代码即可:

temp = strcmp(statename[i].c_str(), statecheck);

方案2:使用C++原生字符串比较(更推荐)

直接用std::string重载的==运算符完成比较,不需要依赖C风格的strcmp函数,代码更简洁易读:

  1. 先将statecheck的类型从char[20]修改为std::string
  2. 替换报错行的比较逻辑,无需再使用temp变量和strcmp函数

同时修正逻辑问题后的完整可运行参考代码:

#include <iostream>
// 替换为C++的string头文件
#include <string>

using namespace std;

class car {

public:
    int feulcp, batterycp, length, height, width, seater, torque, power, temp;
    char ownername[20], noplate[12];
    // 修改statecheck为string类型
    string statecheck;

    string statename[28] = {"andhra pradesh", "arunachal pradesh", "assam,bihar", "chhattisgarh", "goa", "gujarat", "haryana", "himachal pradesh", "jharkhand", "karnataka", "kerala", "madhya pradesh", "maharashtra", "manipur", "meghalaya", "mizoram", "nagaland", "odisha", "punjab", "rajasthan", "sikkim", "tamil nadu", "telangana", "tripura", "uttarakhand", "uttar pradesh", "west bengal"};

    car() {
        cout << "Please Enter Your State Name: ";
        // 清理缓冲区残留的换行符
        cin.ignore();
        while (true) {
            // 读取整行输入,支持带空格的州名
            getline(cin, statecheck);
            bool is_match = false;
            for(int i=0; i<28; i++) {
                if(statename[i] == statecheck) {
                    is_match = true;
                    break;
                }
            }
            if (is_match) {
                cout << "successful" << endl;
                break;
            } else {
                cout << "INVALID STATE NAME \n PLEASE RE-ENTER: ";
            }
        }
    }

};

int main() {
    car car1;
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:39:05