2013-03-30 65 views
0

好的,所以在我的程序中,我有一個主要函數,我在其中輸入一個字符串到緩衝區(char buffer [20])。它將它作爲char *傳遞給創建鏈接列表結構的函數,將結構的char *值設置爲等於輸入文本char *,然後返回結構指針並將其放在列表的前面。現在,當我放入另一個字符串來創建另一個鏈表結構時,它將結構的char *值設置爲我剛纔放入的文本。我怎樣才能使它能夠在不同的鏈表結構中存儲不同的字符串?防止鏈接列表中的char *發生變化

+0

你能發佈你的代碼的相關片段嗎? – MCeley

回答

1

問題是,您要放入鏈表的所有指針都指向完全相同的位置 - 您提到的char buffer[20]。每次輸入一個新的字符串時,它都會覆蓋緩衝區中的舊字符串。您讀取的以前的指針現在指向最近讀取的字符串,該指針現在仍然指向字符緩衝區。

解決方案是給strdup緩衝區,並將strdup的結果存儲在鏈表中。這將使用從heap分配的空間複製字符串(因此是名稱),因此每個字符串都有自己的內存。

不要忘了最後free每個字符串由strdup返回時,當你完成他們!

+0

謝謝,完美的工作。 – user2226224

0

您可能會寫入相同的buffer,並且有兩個指向該緩衝區的char *指針。

您需要複製緩衝區,例如與strdup(確保完成後釋放字符串)。或者,將char *替換爲鏈接列表節點結構中的char [20],然後將字符串替換爲該字符串。