+ -
当前位置:首页 → 问答吧 → C或C++大神们快来相助啊,有个小小的问题,关于c风格字符串的

C或C++大神们快来相助啊,有个小小的问题,关于c风格字符串的

时间:2011-12-03

来源:互联网

void main()
{
char *p="fhakh";
int i=2;
cout<<p<<endl;
cout<<*(p+i)<<endl; 
cout<<p[i]<<endl;
*(p+i)='z'; //为什么不能这样赋值?
p[i+1]='x'; //为什么不能这样赋值?
cout<<p<<endl;
}//应该如何修改?

作者: xianggnai   发布时间: 2011-12-03

1。
*(p+i)='z'; //为什么不能这样赋值?
 p[i+1]='x'; //为什么不能这样赋值?
 
因为p 是静态存储常量,是不能修改的
2。应该如何修改?
改为
 char p[]="fhakh";
即可
  

作者: gameslq   发布时间: 2011-12-03

C/C++ code

//程序崩了...
#include <iostream>

using namespace std;

int main()
{
    char *p="fhakh";//这里的字符组合起来可以当个字符数组,指向数组的指针+1之后知道是跳过了多少个地址不?
    int i=2;
    cout<<p<<endl;
    cout<<*(p+i)<<endl;
    cout<<p[i]<<endl;
    *(p+i)='z';//没有能保存的空间(内存)
    p[i+1]='x';
    cout<<p<<endl;
    return 0;
}

作者: duke56   发布时间: 2011-12-03

修改字符串字面常量在c/++中都是未定义行为。
现在绝大部分的实现都把字符串字面常量保存一个不可写的页面里,所以不能修改。

作者: Demon__Hunter   发布时间: 2011-12-03