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

C语言中的字符串字面量真的不可修改吗?

关于C语言字符串字面量修改的疑问

你之前的理解完全正确:

  • 用char* a = "abc";定义时,a指向的是存放在只读数据段的字符串字面量,尝试修改a[0] = 'c';会触发未定义行为,程序大概率崩溃或出现异常。
  • 只有用char a[] = "abc";时,字符串字面量会被拷贝到栈上的数组中,此时数组内容是可修改的,a[0] = 'c';能正常执行。

那篇帖子里的代码修改path_var[j]='\0';并没有触碰字符串字面量,核心原因是path_var指向的不是只读的字面量,而是一块可修改的内存缓冲区。

原回答的逻辑是先把环境变量PATH的内容拷贝到了可修改的内存里(比如通过strdup或者malloc+strcpy实现),之后的所有修改都是在这份拷贝上进行的——把路径中的冒号替换成\0,本质是分割字符串,而不是修改只读的字面量。

另外array[current_colon] = path_var+j+1;只是把指针指向缓冲区里的不同位置,并没有修改字符串内容,自然也不存在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:25:51