我试图做一个链接列表,其中每个节点存储一个字符串,但我有一个问题,其中每个节点最终在每个节点中存储相同的确切字符串单节点。在main()的结尾处,我打印出存储在每个节点中的单词,它总是重复为整个列表输入的最后一个字符串。链接列表的每个节点具有相同的字符串
我没有任何线索发生了什么事情,因为如果我将它制作成一串字符,它就可以很好地工作,每个字符都存储在正确的节点中。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct wordnode {
char *word;
struct wordnode *next;
};
struct wordnode *link = NULL;
void addword(char *aword);
int main(void) {
char *aword;
int i;
for(i = 0; i < 10; i++) {
scanf(" %s", aword);
addword(aword);
}
printf("\n");
for(; link != NULL; link = link->next) {
printf("|%s ", link->word);
}
printf("|\n");
return 0;
}
void addword(char *aword) {
struct wordnode *cur, *prev, *new_node;
new_node = malloc(sizeof(struct wordnode));
new_node->word = aword;
for(cur = link, prev = NULL; cur != NULL; prev = cur, cur = cur->next) {
;
}
new_node->next = cur;
if(prev == NULL) {
link = new_node;
} else {
prev->next = new_node;
}
}
您有多个问题。它开始于你如何使用'scanf'传递未初始化的指针。 'scanf'函数需要一些足够大的分配内存来写入输入。它不分配内存本身。 –
您应该复制输入的字符串。 –
指针不会奇迹般地创建内存。 'char * aword'未初始化并指向未定义的位置。像这样使用它会调用未定义的行为。它应该是char char [SIZE];'为了*分配char数组。你不应该简单地复制指针('new_node-> word = aword;'),而是复制指向的位置(参见'strdup')。最后,在C中一贯的做法是释放所有分配的内存。祝你好运,练习C ;-) ... –