指针到底能不能修改其指向的常量字符串?
来源:互联网 发布:拍网络剧怎么赚钱 编辑:程序博客网 时间:2024/04/29 08:02
http://m.blog.csdn.net/article/details?id=11248789
1.指针到底能不能修改其指向的常量字符串?今天做一个字符串右移函数时,直接使用指针来修改字符串常量的值出现了奇怪运行时错误。
代码如下:
#include"stdio.h"#include"string.h"void LoopMove(char*pStr,int steps) { char temp ,temp_ch ; //char*cp=pStr ; int i ,j ; int str_len=strlen(pStr) ; for(i=0;i<steps;i++) { temp=*(pStr+str_len-1) ; for(j=str_len-1;j>0;j--) { *(pStr+j)=*(pStr+j-1) ; } *(pStr+0)=temp ; }}int main(){ char *str="abcdefghi" ; int N=2 ; LoopMove(str,N) ; printf("%s",str) ; return 0 ;}
运行时出现错误:LoopMove.exe 中的 0x00cf141c 处有未经处理的异常: 0xC0000005: 写入位置 0x00cf5748 时发生访问冲突。
出错的位置是: *(pStr+j)=*(pStr+j-1) ;
从错误的类型来看是内存写入错误,说明对*(pStr+j)的赋值非法
2.然后做了个小测试发现仍然存在这样的错误,说明错误应该是因为指针p指向字符串常量导致。
#include<iostream>using namespace std ;int main(){ char*p="abcdefghi" ; int str_len=strlen(p) ; char temp=*(p+str_len-1) ; cout<<"temp:"<<temp<<endl ; *(p+str_len-1)='k' ; cout<<"string:"<<p<<endl ;}
上程序运行到*(p+str_len-1)='k'
在运行时出错,错误类型是写入内存冲突。<高质量C C++编程指南>这本书上说: 指针p 指向常量字符串(位于常量存储区),常量字符串的内容是不可以被修改的,企图修改常量字符串的内容而导致运行错误。所以这个问题出现的原因是char*p=”abcdefghi”,赋值的是字符串常量,存储在常量存储区,而常量存储区的内容是无法修改的。
3.如果使用数组来代替的话,数据就存储在堆栈空间,堆栈空间的内容是可以修改的,就不会出现运行时错误。
#include"stdio.h"#include"string.h"void LoopMove(char*pStr,int steps) { char temp ; //char*cp=pStr ; int i ,j ; int str_len=strlen(pStr) ; for(i=0;i<steps;i++) { temp=*(pStr+str_len-1) ; for(j=str_len-1;j>0;j--) { *(pStr+j)=*(pStr+j-1) ; } *(pStr+0)=temp ; }}int main(){ char str[]="abcdefghi" ; int N=2 ; LoopMove(str,N) ; printf("%s\n",str) ; return 0 ;}
0 0
- 指针到底能不能修改其指向的常量字符串?
- 指针到底能不能修改其指向的常量字符串?
- 指针到底能不能修改其指向的常量字符串?&向NULL地址copy数据
- 指针为何不能修改其指向的常量字符串
- 指向字符串常量的指针
- 指向字符串常量的指针变量
- 关于字符串能不能修改,重指向的问题解释
- 指针指向常量的场合,不能试图通过修改指针指向的内容来修改常量
- 试验指向常量二维字符串的常量指针
- 指向常量的指针常量
- 指向常量的指针
- 指向常量的指针
- 指向常量的指针
- 指针指向的字符串不能修改
- 为什么不能修改指向字符串的指针
- 常量指针、指针常量、指向常量的常量指针
- 指针常量,常量指针。指向常量的常量指针
- 指针常量,常量指针, 指向常量的常量指针
- 大数据工程师:大数据的java基础 第十二周
- 虚幻4 碰撞过滤
- Style-Of-JavaScript 编程风格
- java集合框架中contains(),containsKey()和containsValue()的用法:
- AFNetworking2.0源码解析<三>
- 指针到底能不能修改其指向的常量字符串?
- FZU 2028 时空门问题(STL+广度优先搜索)
- Ubuntu配置ant环境
- java19天
- 大数据工程师:大数据的java基础 第十三周
- Sub-process /usr/bin/dpkg returned an error code (1) 问题解决
- .NET服务器控件
- android 颜色color.xml文件及部分中英文对照
- idf实验室 天罗地网 一种编码而已 学习笔记