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

为何用指针声明的C语言字符串无法通过索引修改?

字符串修改失败的原因解析

两种声明的本质差异

  • 数组声明 char stringer[]="hello"
    这条语句会在栈上分配一块大小为6的字符数组(包含末尾的'\0'),并把字符串字面量"hello"的内容复制到这个数组中。这个数组属于当前函数的局部可写内存,所以执行stringer[2]='A'修改数组元素是完全合法的操作。

  • 指针声明 char *stringer="hello"
    这条语句定义了一个字符指针,直接指向字符串字面量"hello"在内存中的首地址。而C标准规定,字符串字面量会被存储在只读数据段(比如程序的.rodata区域),这块内存的读写权限是只读的。当你尝试执行stringer[2]='A'去修改这块只读内存的内容时,属于未定义行为——程序可能直接崩溃,或者出现不可预期的错误,表现出来就是“无法完成修改”。

总结

数组拥有独立的可写内存空间,而指针只是指向了只读的字符串字面量,二者的内存权限不同,这就是修改操作一个成功一个失败的核心原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:50:24