0

さて、私のプログラムには、文字列をバッファ (char buffer[20]) に入力するメイン関数があります。これを char * としてリンク リスト構造体を作成する関数に渡し、構造体の char * 値を入力テキスト char * と等しく設定し、構造体ポインターを返し、リストの先頭に配置します。別の連結リスト構造体を作成するために別の文字列を挿入すると、両方の構造体の char * 値が、入力したテキストに設定されます。異なる連結リスト構造体に異なる文字列を格納できるようにするにはどうすればよいですか?

4

2 に答える 2

1

問題は、リンクされたリストに入れているすべてのポインターがまったく同じ場所を指していることです-char buffer[20]あなたが言及した. 新しい文字列を入力するたびに、バッファ内の古い文字列が上書きされます。以前に読み取ったポインターは、文字バッファーを指していましたが、現在も最後に読み取られた文字列を指しています。

解決策はstrdup、バッファに結果をstrdupリンク リストに格納することです。これにより、 heapから割り当てられたスペースを使用して文字列 (したがって名前) が複製されるため、各文字列には独自のメモリがあります。

freeそれらを使い終わったら、最終的に によって返される各文字列を忘れないstrdupでください!

于 2013-03-30T02:33:03.550 に答える
0

おそらく同じ に書き込み、そのバッファへのbuffer2 つのchar *ポインタを持っています。

たとえば、バッファをコピーする必要がありますstrdup(完了したら、文字列を解放してください)。または、リンク リスト ノード構造体のchar *を aに置き換え、そこに文字列を置き換えます。char [20]strcpy

于 2013-03-30T02:33:08.677 に答える