关于网友提出的“ 为什么字面量字符串初始化复制给数组时可以被修改,复制给指针不能被修改?”问题疑问,本网通过在网上对“ 为什么字面量字符串初始化复制给数组时可以被修改,复制给指针不能被修改?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 为什么字面量字符串初始化复制给数组时可以被修改,复制给指针不能被修改?描述:
1 #include
2
3 int main(int argc, char *argv[])
4 {
5 //"hello world!"不是常量吗?为什么可以通过p[i]和*(p+i)来修改。
6 char p[] = "hello world!";
7 //p[2] = 'L';
8 //printf("%s\n", p);
9 //*(p+2)='e';
10 //printf("%s\n", p);
11
12 char *str = "goodbye world!";
13 /*** 同样,*str 通过 str[i] 和 *(str+i_) 来修
14 改字符串时,能够编译通过,执行时发生段错误。***/
15 //str[2] = 'Z';
16 //printf("%s\n", str);
17 //*(str+2) = 'Z';
18 //printf("%s\n", str);
19
20 return 0;
21 }
解决方案1:
分配的位置不同吧,数组是分配在栈上的,而指针形式貌似是分配在全局区还是什么别的地方的