如果我想在不更改指針地址的情況下更改指向的值,我該怎麼辦?C,將一個指向的值賦給一個指向的值,比如* a = * b;
3,*d=*b
將在運行時返回分段錯誤。我認爲這是因爲*d
沒有指向任何內存空間。這也解釋了爲什麼2,工作。但是,對於1,*a
和*b
指向相同大小的內存,爲什麼它會在這裏返回分段錯誤?
void main(void){
char *a="abcd";
char *b="1234";
char *c=(char *)malloc(sizeof(char));
char *d;
*a=*b; //1.segmentation fault
*c=*b; //2.ok
*d=*b; //3.segmentation fault
}
您不能更改字符串文字。任何嘗試修改它們都會導致未定義的行爲。此代碼無法工作。 –
可能的重複[爲什麼在寫入以「char \ * s」初始化但不是「char s \ [\]」的字符串時出現分段錯誤?](http://stackoverflow.com/questions/164194/爲什麼要做,我得到一個分割錯誤,當寫入字符串初始化與cha),http://stackoverflow.com/questions/10202013/change-string-literal-in -c-through-pointer,http://stackoverflow.com/questions/1011455/is-it-possible-to-modify-a-string-of-char-in-c/1011481,http://stackoverflow.com/questions/480555/modify-c-string-constants –