您的位置:首页 > 其它

关于字符串指针指向内容不能修改的问题

2013-03-19 22:01 393 查看
char *s = "sjdkjfl";
s[3] = 'd';

上面的程序在编译的时候出现问题,而当改成下面数组样式的时候则通过了编译。

char s[] = "sjdkjfl";
*(s+2) = 'd';
在水源上提问,有大神回答

char * s = "sjdkjfl";
在内存空间里是分配到“只读内存区”

char a[] = "sjdkjfl";
则是以堆栈的形式(局部变量,若是全局变量则存在全局变量区)存在,是可以被修改的。

同时,引号包含的字符串都是不能被修改的,所以用数组形式其实是执行以下代码:

char a [strlen("sjdkjfl")+1];
memcpy(a, "sjdkjfl", strlen("sjdkjfl")+1);


下面用The C Programming Language的说明来进一步理解(p90)

char a[] = "now";
char *p = "now";


指针a始终指向一个存储位置,指向的位置不能修改,并且数组中的单个字符可以进行修改;而指针p可以被修改指向其他地址,但如果试图修改字符串的内容是没有定义的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: