void main()
{
char *p = "dsadasdsa";
*(p + 1) = 'a';
printf("%s\n", p);
printf("hello\n ");
system("pause");
return ;
}
这里的 char *p 里面的字符是不能修改的,因为p指针变量放在栈区,而“”dsadasdsa“”放在常量区(全局区),p 只是放了”dsadasdsa“”的地址,不能修改常量的值。所以这个程序就会出错。
改正方法1:
void main()
{
char p[] = "dsadasdsa";
*p = 'a';
printf("%s\n", p);
printf("hello\n ");
system("pause");
return;
}
这里将p[] 整个数组放在栈区,这样就可以修改了。
方法2:
void main()
{
char *p = NULL;
p = (char *)malloc(100);
//p = "dsadasdsa"; //这步是错误的 。
strcpy(p, "dsadasdsa");
*p = 'a';
printf("%s\n", p);
printf("hello\n ");
system("pause");
return;
}
指针变量放在栈区,同时在堆区开辟空间,堆区的地址放在指针变量p里面。
strcpy(p, “dsadasdsa”); 就是在指针变量p所指的堆区地址赋值"dsadasdsa","dsadasdsa"是放在堆区的,所以这个区域的值是可以改变的。