修改const char* 指向的内容为什么不出错?
我只是想确认下修改const char* 指向的内容会不会真的有问题
代码如下,编译会报警,但运行却没有问题?
#include <stdio.h>#include <string.h>int main(){ char a[]="asdf123456"; const char *p = a; printf("\na[]=%s\n",a); a[0]='A'; printf("\na[]=%s\n",a); p[1]='S'; printf("\na[]=%s\n",a); strcpy(p, "987656412"); printf("\na[]=%s\n",a); return 0;}char a[]="asdf123456"; const char *p = a;
[解决办法]
编译器会报警证明他在提醒你,你这个代码可能会出错。
关键是第二个问题,为什么能运行?
char a[]="asdf123456";
这是个局部变量,局部变量是从栈里分配空间的,恰好栈空间是可读可写的,所以你的代码可以运行。
如果改成这样,那即使你用那个编译器,应该也是运行不起来的:
char *a = "asdf123456";