C 指针操作题,没想清楚哪里的问题
#include <stdio.h>
int main(){
int i;
char *p1,*p2,*s[4] = {"tree","flow","grass","garden"};
for(i=0;i<4;i++){
p2 = s[i];
p1 = p2 + i;
while(*p1 != '\0'){
*p2 = *p1;
p1 ++;
p2 ++;
}
*p2 = '\0';
printf("i is %d %s\n",i,s[i]);
}
return 0;
}
以上是源程序,我在运行的时候,在*p2 = *p1;执行报错。
HelloWin.exe 中的 0x00bc43b7 处有未经处理的异常: 0xC0000005: 写入位置 0x00bc7754 时发生访问冲突
不明白是什么原因造成的。希望大家多多帮忙。
[解决办法]
直接写在程序代码中的字符串是常量字符串,存放在只读内存区
*p2=*p1试图修改p2指向的内存区域,只读内存禁止修改,因此报错
[解决办法]
char ,*s[4] = {"tree","flow","grass","garden"};这样定义的字符串是常量字符串,只能引用,不能改变的,可以采用动态内存分配实现