2016-10-17 14 views
0

whileループを使用して二重リンクリストに要素を追加しようとしています。ノードは作成されていますが、それらはすべて同じ単語を格納しています。これは私が読んでいるファイルの最後の単語です。ここではwhileループです:二重リンクリストに要素を追加する

while(fscanf(text, "%s", word) == 1) 
{ 
    struct node *temp; 
    temp = new_node(word); //Creates a new node 
    temp->prev = cursor; //Cursor represents current position in linked list 
    temp->next = NULL; 
    cursor->next = temp; 
    cursor = temp; 
} 

カーソルは、whileループの開始前にリストの先頭に初期化されます。

そして、ここに私のノード構造体である:

struct node 
{ 
    struct node* prev; 
    struct word_entry* data; 
    struct node* next; 
}; 

私のwhileループと間違っていますか?以前のノードを上書きし続けるのはなぜですか?お願いしてありがとう!

+2

バグが 'new_nodeで、おそらくです:ノードへの割り当て中

あなたは、ノードごとに別々の単語のストレージを割り当て、そのストレージに単語をコピーする必要があります() 'あなたが私たちを示していない。 –

+2

'temp = new_node(word);' - > 'temp = new_node(strdup(word));' – BLUEPIXY

答えて

0

ファイルがtextにあり、あなたの単語をwordという文字配列にロードしています。

ループがすべてのノードをこの同じ配列に割り当てるので、temp = new_node(word);すべてのノードが同じ文字配列を指しています。

ファイルから最後の単語をwordに読み込むと、すべてのノードがそれを指しているので、すべて同じ単語を読み込みます。

nodeword = malloc(strlen(word) + 1); 
if(nodeword) { 
    strcpy(nodeword, word); 
    nodeword[strlen(word)] = 0; 
    temp = new_node(nodeword); 
} 
else { 
    break; 
} 

かのstrdup()あなたがするかどうか...

+0

これはうまくいった!どうもありがとうございます! –

関連する問題