当前位置: 代码迷 >> VC >> 请高手帮小弟我看一下下面的程序
  详细解决方案

请高手帮小弟我看一下下面的程序

热度:8165   发布时间:2013-02-25 00:00:00.0
请高手帮我看一下下面的程序

#include<iostream>
#include<string.h>
using namespace std;
void main()
{
char *p1= "abc";// ***
char *p2 = "de";
for(int i=0;i<2;i++)
{
cout << p1[1+i] << endl;
cout << p2[i] << endl;
p1[1+i] = p2[i];//跟踪调试时此行有内存访问错误
}
}

而将***所在行改为char p1[]= "abc";则就不会有错误了。请高手帮我分析一下原理吧

------解决方案--------------------------------------------------------
p1是指向字符串首地址的,只能在声明时赋值。
例如:char *p1=“abc”;是正确的
但是如下就是错误的:
char *p1;
*p1=“abc”;
------解决方案--------------------------------------------------------
char *p1= "abc";// abc 分配在静态栈上,属于静态参数。不能进行修改
char *p2 = "de";// de 也分配在静态栈上,属于静态参数。不能进行修改

  相关解决方案