问以下代码是否有问题
1 #include <stdio.h>
2
3 int main()
4 {
5 char *s= "AAA";
6 printf("%s\n",s);
7 s[0]='B';
8 printf("%s\n",s);
9
10 return 0;
11 }
运行结果:
运行结果发生了段错误,一定是操作指针,地址出现问题,比如内存越界,指针指错了,
char *s= "AAA"; 这儿的 "AAA"是字符串常量,指针指向了放在只读内存区中的常量,只读区域是不允许改变。这儿的'B'是字符常量,要是一个字符串,就可以,字符串是数组,赋初值的时候,系统就分配好了内存,这儿的内存在只读区域中。
s[0]='B';
修改后的代码
#include <stdio.h>
2
3 int main()
4 {
5 char *s= "AAA";
6 printf("%s\n",s);
7 s="abc";
8 printf("%s\n",s);
9
10 return 0;
11 }
运行结果
修改后的指针s没有取修改 "AAA"的值,而是指向了一个新的字符串。