回覆OP在@GrahamPerks的回答中的評論。
,將工作,但我不希望使用更多的應對,因爲我們可以用指針做
比方說,通過element
使用的內存看起來像如下:
element +---------+ +---+---+---+---+---+---+---+---+------+
| ptr1 | -> | a | | s | t | r | i | n | g | '\0' |
+---------+ +---+---+---+---+---+---+---+---+------+
如果您使用:
table->head->element = element;
的值是ptr1
。
如果一段時間後,你說幹就幹,通過element
改變ptr1
的內容,例如通過使用:
fscanf(file, "%s", element);
你可以結了:
element +---------+ +---+---+---+---+---+---+---+---+---+---+------+
| ptr1 | -> | n | e | w | | s | t | r | i | n | g | '\0' |
+---------+ +---+---+---+---+---+---+---+---+---+---+------+
在這一點上,您從table->head->element
看到的字符串是"new string"
,而不是"a string"
。
這是當您不復制element
的內容時發生的情況,而只是複製指針值element
。
如果你想的table->head->element
值保持"a string"
而element
的值發生變化,你必須使用
int len = strlen(element);
table->head->element = malloc(len+1);
strcpy(table->head->element, element);
複製的element
的內容,或者,如果你的編譯器支持strdup
,通過使用
table->head->element = strdup(element);
'* table-> head-> element = * element;'? – 2015-02-09 03:08:58
由於沒有工作,我的意思是我得到EXC_BAD_ACCESS(代碼= 1; ...) – fiz 2015-02-09 03:10:43
,看起來像你沒有分配空間至少有一個指針 – 2015-02-09 03:11:18