指针修改字符串字面量( 二 )

char * str3 = "abc";而系统直接把一个指向char的指针给了我,到底这个string有多长呢。我们不知道。但是因为我们会一直将这个str变量当成string来用,所以系统不可能允许我们做把最后一位的’\\0’删掉(无论是有意的还是无意的)这种事情。所以,这个str是绝对不能被更改的(好像是这个原因吧,反正至少是原因之一)
■网友
不能修改字符串字面量。
■网友
【指针修改字符串字面量】 当使用char *p="abc"的时候 p指向的字符串"abc"是不允许修改的(编译器是这样认为的)。理由:如果有另外一个char str="abc",编译器出于节省内存的需要,很可能会只保存一个"abc",让*p和*str都指向"abc",这个时候如果通过p改变字符串,str可能也会跟着改变,但这显然是不允许的。有些编译器会把"abc"保存在roDATA区(只读数据区),这个时候,如果试图通过p修改变量,会被阻止。

■网友
后面的程序中,ptr是保存了一个字符串常量的地址,字符串常量是存放在只读数据段中的,所以*ptr是不可以修改的。前面的程序,你修改的是数组中的内容,所以修改成功了。


推荐阅读