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

C++中为何修改字符串字面量的代码抛出异常,数组赋值却正常?

为什么两段字符串修改代码结果不同?
  • 首先得明确:像"mystr"这类字符串字面量,在C++里是const char[]类型,编译器会把它放到程序的只读内存段里,这块内存根本不允许写入操作。

  • 看第一段代码:
    char* myStr = const_cast<char*>("mystr"); 用const_cast强制去掉了字符串字面量的const属性,但这只是绕开了编译器的检查,实际内存还是只读的。当执行myStr[1] = 'a'时,试图往只读内存里写数据,这属于C++里的未定义行为,系统会直接触发内存访问错误(比如段错误、抛出异常)。

  • 再看第二段代码:
    char myStr2[6] = "myStr"; 这行是把字符串字面量"myStr"的内容完整复制到了栈上的数组myStr2中。这个数组是程序在栈上申请的可写内存,完全属于你可以自由修改的区域,所以myStr2[1] = 'a'是合法操作,自然不会报错。

简单总结:前者是硬改只读的原字符串字面量,后者是修改它的可写副本,结果当然不一样。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:52:00