问答详情
源自:5-3 字符数组和指针字符串

str2 为什么不能修改??

  1 #include <stdio.h>
  2 #include <malloc.h>
  3 int main()
  4 {       
  5         char *str2;
  6         printf("input the str2 value\n");
  7         str2=(char *)malloc(sizeof(char)*10);
  8         str2="world";
  9         scanf("%s",str2);;
 10         printf("str2 is %s\n",str2);
 11         return 0;
 12 }                

按照老师说的我这里已经用malloc为str2在栈内存里面分配了空间,为什么还是不能修改啊??

提问者:King_J 2015-09-02 16:27

个回答

  • onemoo
    2015-09-03 20:56:56
    已采纳

    str2="world" 这样并不是把world这几个字符复制到str2所指的区域,字符串字面量做右值时会转换为指向首字符的指针,所以这语句是把str2指向“world”这个字符串所在的位置。需要复制字符串应使用LS说的strcpy函数。

    一般程序会把字符串字面量放到只读数据段中(无法被修改),所以后续通过str2来修改这些内容会引起"段错误"。

    你代码的另一个问题是,在你给str2第二次赋值后就丢掉了前一次分配的指针,导致无法回收那段内存,引起内存泄漏。

  • King_J
    2015-09-02 18:46:53

    str2="world"赋值应该改成strcpy(str2,"world"),应为"world"存在代码区不能进行修改,而用strcpy则是存在栈区。