char * 指向的字符串不能修改
来源:互联网 发布:淘宝网小棉袄 编辑:程序博客网 时间:2024/05/21 06:29
自己学习的时候也对这个感到过困惑,mark一下,希望给大家一点帮助,也方便自己回顾
看几个例子把
#include<iostream>using namespace std;int main(){char *str = "abc";str[0] = 'A';cout << str << endl;return 0;}
这个会报错,然后终止运行。
为什么不行呢?
问题就出在这char *str = "acb"; 这句的作用是abc存到只读内存,并且把这段内存的首地址给str. 而str[0] = ‘A’;这句就是对只读内存进行写操作,当然是不行的
那我们看底下这句
#include<iostream>using namespace std;int main(){char str[] = "abc";str[0] = 'A';cout << str << endl;return 0;}
正常运行。
这个很简单。char str[] = "acb";这句只是从栈空间得到的数组内存(不是只读内存),没有什么其他限制(除了空间大小有限外)。进行字符串修改自然也没有什么问题
再看下下面这个你可能会疑惑?
#include<iostream>using namespace std;int main(){char *str = "abc";str = "ABC";cout << str << endl;return 0;}
正常运行。
char *str = "acb";str = "ABC";这不是只读内存吗?没错,你是对的。但是它就是可以运行。原因是这样的。char *str = "acb";这句是把指向abc的只读内存的首地址给str。
str = "ABC";而这句这只是简单的再将指向ABC的只读内存给str而已,并没有在原来常量abc上动手脚。
那你可能想到我们只要自己申请堆内存不就好了吗?想法是对的
看看下面这个不行,想想为什么?
#include<iostream>using namespace std;int main(){char *str = new char[10];str = "abc";str[0] = 'A';cout << str << endl;return 0;}
我想你们也知道原因了,虽然我们申请了堆内存,但是那个内存我们只是拿来存指向常量abc的只读内存的首地址。str[0] = 'A';这句还是对只读内存进行了写操作,因此也是有问题的,本质上都是一样的,不能对只读内存进行写操作。
希望有所帮助!
1 0
- char * 指向的字符串不能修改
- char* 指向内容不能修改的问题
- char*指向内容不能修改的问题
- char* 指向内容不能修改
- 指针指向的字符串不能修改
- 为什么不能修改指向字符串的指针
- char* 指向内容不能修改的问题(整理)
- char* 指向内容不能修改的问题(整理)
- char* 指向内容不能修改的问题(整理)
- 关于字符串指针指向内容不能修改的问题
- 指针为何不能修改其指向的常量字符串
- char *指向的内容不可修改
- 关于C语言char *指向的字符串
- 指向字符串的指针为何不能用来修改此字符串(c语言)http://blog.sina.com.cn/s/blog_68ff96b70101him1.html
- 指针指向常量的场合,不能试图通过修改指针指向的内容来修改常量
- 【c语言】实现char * my_strcat(char * dest,char *src)函数. 返回: dest字符串的地址。 功能:将src指向的字符串追加到dest指向字符串的后面
- 【C语言】实现char * my_strcat(char * dest,char *src)函数. 返回: dest字符串的地址。 功能:将src指向的字符串追加到dest指向字符串的后面。
- 实现char * my_strcat(char * dest,char *src)函数. 返回: dest字符串的地址。 功能:将src指向的字符串追加到dest指向字符串的后面
- 指针二三事
- c语言学习笔记4之c语言的规则
- android webview中上传控件点击无效的解决办法
- Android基础——四大组件之Activity
- SPOJ GSS3 Can you answer these queries III
- char * 指向的字符串不能修改
- 表达式求值
- Lightoj 1104 概率dp
- 关于import
- The declared package "com.XXX" does not match the expected package ""
- Web运行流程
- 字符串函数strchr 、 strrchr 、strrstr的实现
- HDU 1176(dp)
- C#调用C++导出函数