int main()
{
char *p=”qidanei”;
printf(“%s\n”,p);
p[0]=’z';
printf(“%s”,p);
getch();
exit(0);
}
输出:qidanei
zidanei
不是说p相当一个指向常量的指针吗,但是第2 个输出为”zidanei”,既然可以修改,是不是编译器的原因啊!
书上说:“在ANSI C中,初始化指针所创建的字符串常量只能是只读,如通过指针修改某个元素程序就会出现未定义的行为”
>> 本文固定链接: http://www.vcgood.com/archives/3148
>> 转载请注明: diantouxiao 2009年04月11日 于 C语言帝国 发表
是编译器的原因。我在linux下运行之后输入为:
qidanei
段错误
你那样应该改不成zidanei的。
指针p只指向那个字符串的开始地址,要输出一次性全部输出全部字符。相当于一把钥匙,它能打开一扇门让你看见屋里面的东西,但不能对那些东西做更改。
要改得写成:
#include<stdio.h>
int main()
{
char *p,a[8]={‘q’,'i’,'d’,'a’,'n’,'e’,'i’};
p=a;
printf(“%s\n”,p);
p[0]=’z';
printf(“%s”,p);
}