关于字符串指针指向内容不能修改的问题
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可以被修改指向其他地址,但如果试图修改字符串的内容是没有定义的。
相关文章推荐
- char*指向内容不能修改的问题
- 关于字符串指针不可修改的问题
- 关于字符串指针不可修改的问题
- 指向字符串的指针为何不能用来修改此字符串(c语言)http://blog.sina.com.cn/s/blog_68ff96b70101him1.html
- 指向字符串的指针为何不能用来修改此字符串
- 指针指向常量的场合,不能试图通过修改指针指向的内容来修改常量
- 关于字符串指针不可修改的问题
- char* 指向内容不能修改的问题
- 指针为何不能修改其指向的常量字符串
- char* 指向内容不能修改的问题(整理)
- 关于字符串指针不可修改的问题
- 为什么不能修改指向字符串的指针
- char* 指向内容不能修改的问题(整理)
- 指针指向的字符串不能修改
- 关于字符串指针不可修改的问题
- 关于字符串能不能修改,重指向的问题解释
- char* 指向内容不能修改的问题(整理)
- 关于字符串指针不能修改的疑问
- 关于字符串指针不可修改的问题
- 关于字符串指针不可修改的问题