char *p,arrChar[100]="texting";
p="texting";
*p='0';
p=arrChar+1;
printf("%d\t%d\n",sizeof(arrChar),strlen(arrChar));
printf("%d\t%d\n",sizeof(char *),strlen(p));这个有什么错误吗?
为什么我用的编译器编译的时候,*p=‘0’有这句编译时没错,可是运行就会中止呢?

解决方案 »

  1.   

    p="texting";
    你指的是字面值,字面值是不能修改的。你后面*p='0';当然会出错了。
    至于编译没出错,而运行出错了。这是因为C++是静态编译的(好像又叫前绑定),
    编译的时候不会检查*p='0';,运行到*p='0';时当然出错了。<这里说得不太专业,我也是菜鸟,不过原理就是这样的>
    望高手指点!
      

  2.   


    你下面这两行:char *p;
    P="texting";这时,指针p 指向的是常量 "texting"; 这时,你不能修改 p 指向的内容,因为常量是不允许修改的。
    所以,运行时就会出错了。
      

  3.   

    指针p="texting"赋值后就相当于常量了,常量自然不能在赋值了
      

  4.   

    楼上几位说的是,p虽然是变量,其值可以修改,但执行 p="texting"; 后,p指向常量区,常量区的值是不能改的,因此 *p = '0'; 会出错.
      

  5.   

    p="texting"; 
     *p = '0'; P指针指向常量了,怎么修改?
      

  6.   

    char *p,arrChar[100]="texting";
    char* buf = new char[strlen(arrChar)+1];
    p = buf;
    *p='0';
    p=arrChar+1;
    printf("%d\t%d\n",sizeof(arrChar),strlen(arrChar));
    printf("%d\t%d\n",sizeof(char *),strlen(p));
    delete[] buf;
    buf = NULL;