为什么修改char*指向的字符串字面量会段错误,指向数组时可正常修改?
核心原因是两个指针指向的内存区域权限完全不同
char* pString = "abcdefg"中的"abcdefg"是字符串字面量,编译阶段就会被存入程序的只读数据段,这部分内存的运行权限只有读没有写,直接修改该区域内容会触发操作系统的内存保护机制,抛出段错误。char tmpStr[80]是声明在函数栈上的局部字符数组,栈内存本身是可读可写的。strcpy(tmpStr, pString)的作用是把只读段的字符串内容复制一份到栈上的tmpStr空间里,后续char* pString2 = tmpStr让pString2指向了这块可写的栈内存。pString2[0] = 'A'本质是修改栈上的可写内存,完全符合内存权限要求,所以可以正常运行。
内容的提问来源于stack exchange,提问作者user97662
相关产品推荐
相关产品推荐

