2009
04-11

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中,初始化指针所创建的字符串常量只能是只读,如通过指针修改某个元素程序就会出现未定义的行为”


高手求救》有 2 条评论

  1. 欧阳睿琰 说:

    是编译器的原因。我在linux下运行之后输入为:

    qidanei
    段错误

  2. Civen 说:

    你那样应该改不成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);
    }

留下一个回复