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

C代码存为.cpp文件在VS运行报错const char*无法赋值给char*

核心原因:C 和 C++ 对字符串字面量的类型定义存在差异,二者并非100%语法兼容

你遇到的报错是两种语言标准的设计差异导致的,具体规则如下:

  • C 标准中,字符串字面量(比如 "engine a")的类型是 char[],虽然它实际存储在只读内存段、修改其内容会触发未定义行为,但类型本身没有const修饰,所以赋值给char*类型的变量是语法合法的,编译器一般只会给出可选警告,不会报错,你看的教程大概率是用C编译器跑的代码,所以可以正常运行。
  • C++ 标准中,字符串字面量的类型是 const char[],天生携带const属性,C++的类型检查远严格于C,因此将const char*类型的值赋值给无const修饰的char*属于明确的类型不匹配,会直接触发编译错误。

解决方案

你可以根据需求选择任意一种方式解决:

  1. 保留C语言的编写逻辑,将文件后缀从.cpp改为.c,Visual Studio会自动调用C编译器编译代码,不会触发该报错。
  2. 适配C++的类型规则,修改结构体成员的类型声明,加上const修饰:
struct {
    const char* engine;
} car1, car2;

int main(void) {
    car1.engine = "engine a";
    car2.engine = "engine 2";
    return 0;
}
  1. (不推荐)在Visual Studio的C++编译设置中关闭/permissive-开关,启用非标准兼容模式,编译器会放宽类型检查允许该赋值操作,但会丢失const安全校验,后续很容易触发未定义的内存操作问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:39:03