Wil*_*Lou 2 c++ pointers const char
使用此代码,我得到一个分段错误:
char* inputStr = "abcde";
*(inputStr+1)='f';
Run Code Online (Sandbox Code Playgroud)
如果代码是:
const char* inputStr = "abcde";
*(inputStr+1)='f';
Run Code Online (Sandbox Code Playgroud)
我将收到"分配只读位置"的编译错误.但是,对于第一种情况,没有编译错误; 只是分配操作实际发生时的分段错误.
有谁能解释一下?
以下是标准中关于字符串文字的内容[2.13.4/2]:
不以u,U或L开头的字符串文字是普通的字符串文字,也称为窄字符串文字.普通的字符串文字具有"n const char数组"类型,其中n是下面定义的字符串的大小; 它具有静态存储持续时间(3.7)并使用给定的字符进行初始化.
所以,严格来说,"abcde"有类型
const char[6]
Run Code Online (Sandbox Code Playgroud)
现在你的代码中发生的是隐式转换
char*
Run Code Online (Sandbox Code Playgroud)
以便允许分配.其原因可能是与C的兼容性.另请参阅此处的讨论:http://learningcppisfun.blogspot.com/2009/07/string-literals-in-c.html
一旦完成转换,你在语法上可以自由地修改文字,但它失败了,因为编译器将文字存储在不可写的内存段中,正如标准本身所允许的那样.