关于C++指针的问题
- C/C++ code
#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>#include<cassert>using namespace std;char * reversal(char *str,int i,int j){ char temp; while(i<j) { temp=str[i]; str[i]=str[j]; str[j]=temp; i++; j--; } return str;}char * rightshift(char *str,int n){ int len=strlen(str); n=(n%len+len)%len; reversal(str,0,len-n-1); reversal(str,len-n,len-1); reversal(str,0,len-1); return str;}int main(){ char *str="abvdefghi"; printf("%s\n",rightshift(str,-2)); return 0;}这个代码运行时报错
- C/C++ code
#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>#include<cassert>using namespace std;char * reversal(char *str,int i,int j){ char temp; while(i<j) { temp=str[i]; str[i]=str[j]; str[j]=temp; i++; j--; } return str;}char * rightshift(char *str,int n){ int len=strlen(str); n=(n%len+len)%len; reversal(str,0,len-n-1); reversal(str,len-n,len-1); reversal(str,0,len-1); return str;}int main(){ char str[]="abvdefghi"; printf("%s\n",rightshift(str,-2)); return 0;}这个运行不报错
请教这是为什么?
[解决办法]
1 char *str="abvdefghi";
2 char str[]="abvdefghi"
1 编译器把这个字符串变成字符串常量放在常量数据区中。所以不能更改。。
2 编译器把字符串放到内存中。。是可以更改的。;
嗯哪。。大概是这样的。
[解决办法]
楼主看看这个帖子
[解决办法]
那是因为char *str="abvdefghi";中,str 指向的是常量区,常量区中的值是不允许更改的。
char *str="abvdefghi";他就等同于 const char p[] = "abvdefghi";char *str = p;
所以LZ 第一段代码运行到这里str[i]=str[j];就会出错。