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

为什么修改char*指向的字符串字面量会段错误,指向数组时可正常修改?

核心原因是两个指针指向的内存区域权限完全不同

  • char* pString = "abcdefg"中的"abcdefg"是字符串字面量,编译阶段就会被存入程序的只读数据段,这部分内存的运行权限只有读没有写,直接修改该区域内容会触发操作系统的内存保护机制,抛出段错误。
  • char tmpStr[80]是声明在函数栈上的局部字符数组,栈内存本身是可读可写的。strcpy(tmpStr, pString)的作用是把只读段的字符串内容复制一份到栈上的tmpStr空间里,后续char* pString2 = tmpStr让pString2指向了这块可写的栈内存。
  • pString2[0] = 'A'本质是修改栈上的可写内存,完全符合内存权限要求,所以可以正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:27:04