首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

批改const char* 指向的内容为什么不出错

2012-09-29 
修改const char* 指向的内容为什么不出错?我只是想确认下修改const char* 指向的内容会不会真的有问题代码

修改const char* 指向的内容为什么不出错?
我只是想确认下修改const char* 指向的内容会不会真的有问题

代码如下,编译会报警,但运行却没有问题?

C/C++ code
#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;}


[解决办法]
运行没问题很正常
大多数情况下,const写和不写,编译后的程序是一样的
const是用来限制程序员的,不是用来限制程序的
至于限制程序员有什么意义——等你写过大程序你就知道了

编译出警告而不出错误?
要么你的编译器被你修改了某些选项,允许修改const变量,要么你的编译器应该被掷出窗外
[解决办法]
指向const对象的指针,不论指向的对象是const还是非const,都不能通过该指针去修改对象的值。
C/C++ code
 char a[]="asdf123456"; const char *p = a;
[解决办法]
编译器会报警证明他在提醒你,你这个代码可能会出错。
关键是第二个问题,为什么能运行?
char a[]="asdf123456";
这是个局部变量,局部变量是从栈里分配空间的,恰好栈空间是可读可写的,所以你的代码可以运行。

如果改成这样,那即使你用那个编译器,应该也是运行不起来的:
char *a = "asdf123456";

热点排行