Fork me on GitHub

关于char *str=“Hello”; str[0] = 'H';

转载于:https://blog.csdn.net/qq_21688871/article/details/88919221

有些东西不经常碰到确实会想不到

 

 

 

int main()

     {

        char *p="hello world";   //指向一个常量字符串应该这样声明确保不会越界操作:const char *p="hello world";

        p[0]='H';

        printf("%s\n",p);

        return 0;

      }

 运行结果会出现断错误,原因在于,*p="hello world" 这句仅仅声明了一个指针变量,指向字符串"hello world",而"hello world"这个字符串程序没有给它分配空间,编译器把它分配到常量区.而常量字符串的值是不允许被修改的 ,所以会出现断错误.

 

 

   程序改为如下就正确了

    int main()

    {

       char p[12]="hello world";

       char *p1=p;

       p1[0]='H';

       printf("%s\n",p1);

       return 0;

    }   

 

  原因在于,p[12]="hello world"是你自己定义的一个长度为12 的字符数组,所以字符串"hello world"编译器会给它分配空间(在栈中),所以你能修改它的值.

posted @ 2020-10-27 07:53  小白菜·球  阅读(761)  评论(0)    收藏  举报
1