King_J
2015-09-02 16:27
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在栈内存里面分配了空间,为什么还是不能修改啊??
str2="world" 这样并不是把world这几个字符复制到str2所指的区域,字符串字面量做右值时会转换为指向首字符的指针,所以这语句是把str2指向“world”这个字符串所在的位置。需要复制字符串应使用LS说的strcpy函数。
一般程序会把字符串字面量放到只读数据段中(无法被修改),所以后续通过str2来修改这些内容会引起"段错误"。
你代码的另一个问题是,在你给str2第二次赋值后就丢掉了前一次分配的指针,导致无法回收那段内存,引起内存泄漏。
str2="world"赋值应该改成strcpy(str2,"world"),应为"world"存在代码区不能进行修改,而用strcpy则是存在栈区。
Linux C语言指针与内存
116475 学习 · 250 问题
相似问题