0
我在C問題上掙扎,我無法弄清楚我做錯了什麼。單詞文件中的鏈接列表
我正在使用鏈表來存儲單詞。當我執行以下命令:
list *myList = list_new();
list_append(myList,"Word_01");
list_append(myList,"Word_02");
list_append(myList,"Word_03");
list_append(myList,"Word_04");
list_print(myList);
一切都OK,我得到這樣的輸出:
Word_01 -> Word_02 -> Word_03 -> Word_04 -> NULL
好了,現在我走的話,從存儲在文件列表:
Word_01
Word_02
Word_03
Word_04
並執行此代碼:
const char *filename;
filename = "list";
list *myList2 = list_new();
FILE* file = NULL;
size_t size;
char line[256];
file = fopen(filename, "r");
if (file != NULL)
{
printf("File opened.\n");
while (fgets(line, 256, file) != NULL) {
list_append(myList2, line);
}
fclose(file);
}
else {
printf("Could not open file.\n");
exit(EXIT_FAILURE);
}
list_print(myList2);
然後我得到以下輸出:
Word_04 -> Word_04 -> Word_04 -> Word_04 -> NULL
有人可以解釋我爲什麼會發生這種情況?
編輯: 這裏是list_append()
void list_append(list *l, char *w) {
word *new_word = malloc(sizeof(word));
if (l == NULL || new_word == NULL) {
exit(EXIT_FAILURE);
}
new_word->_word = w;
new_word->next = NULL;
if (l->first->_word == "") {
l->first = new_word;
}
else {
word *temp = malloc(sizeof(word));
temp = l->first;
while(temp->next != NULL) {
temp=temp->next;
}
temp->next = new_word;
}
}
您需要**將** list_append()中的字符串** **。你現在正在做的是保存指針值(指向'line'的指針)。每次'行'的內容改變所有這樣的指針改變相同的方式。另外不要忘記'fgets()'保留尾部的''\ n''。 – pmg
由於pmg建議問題在list_append() –
如何複製'char []'而不是指針? – kh4r4