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 }????? ??????????
按照老師說的我這里已經(jīng)用malloc為str2在棧內(nèi)存里面分配了空間,為什么還是不能修改?。??
2015-09-03
str2="world" 這樣并不是把world這幾個字符復(fù)制到str2所指的區(qū)域,字符串字面量做右值時會轉(zhuǎn)換為指向首字符的指針,所以這語句是把str2指向“world”這個字符串所在的位置。需要復(fù)制字符串應(yīng)使用LS說的strcpy函數(shù)。
一般程序會把字符串字面量放到只讀數(shù)據(jù)段中(無法被修改),所以后續(xù)通過str2來修改這些內(nèi)容會引起"段錯誤"。
你代碼的另一個問題是,在你給str2第二次賦值后就丟掉了前一次分配的指針,導(dǎo)致無法回收那段內(nèi)存,引起內(nèi)存泄漏。
2015-09-02
str2="world"賦值應(yīng)該改成strcpy(str2,"world"),應(yīng)為"world"存在代碼區(qū)不能進行修改,而用strcpy則是存在棧區(qū)。