废话不多说,直接上代码:
#include<stdio.h>
int main()
{
char str[]="hello78";
char *str1="world";
printf("%p\n",str);
printf("%p\n",str1);
printf("%s\n",str);
printf("%s\n",str1);
return 0;
}
运行结果:
0x7fffd5b961b0
0x400704
hello78
world
如上所示,字符数组str的地址是在高地址的栈当中,而字符指针str1则在低地址的代码段当中,而C不允许程序直接操作代码段,所以下面这段代码会出现段错误:
#include<stdio.h>
int main()
{
char str[]="hello78";
char *str1="world";
scanf("%s",str1);
printf("%p\n",str);
printf("%p\n",str1);
printf("%s\n",str);
printf("%s\n",str1);
return 0;
}
程序无法修改str1,所以出现段错误。
解决方法:必须为str1分配内存空间(malloc)。