typedef struct NODE{
char *word;
struct NODE *next;
}node;
node *newNode(char *word) {
node *pNode = (node*) malloc(sizeof(node));
pNode->word = word;
pNode->next = NULL;
return pNode;
}
void append(node **ppList, char *word) {
if(*ppList == NULL)
*ppList = newNode(word);
else {
node *tmpList = *ppList;
for(; tmpList->next!=NULL; tmpList=tmpList->next);
tmpList->next = newNode(word);
}
}
void printList(node *list) {
for(; list!=NULL; list=list->next)
printf("[%s]=>", list->word);
printf("NULL");
}
/*=== CODE 1 ===*/
int main() {
char word[MAXCHAR], word2[MAXCHAR], word3[MAXCHAR];
node *list=NULL;
scanf("%s", &word); /* key in AAA */
append(&list, word);
scanf("%s", &word2); /* key in BBB */
append(&list, word2);
scanf("%s", &word3); /* key in CCC */
append(&list, word3);
printList(list);
return 0;
}
/*=== CODE 2 ===*/
int main() {
char word[MAXCHAR];
node *list=NULL;
scanf("%s", &word); /* key in AAA */
append(&list, word);
scanf("%s", &word); /* key in BBB */
append(&list, word);
scanf("%s", &word); /* key in CCC */
append(&list, word);
printList(list);
return 0;
}
输出:
=== CODE 1 OUTPUT ===
[AAA]=>[BBB]=>[CCC]=>NULL /* it works */
=== CODE 2 OUTPUT ===
[CCC]=>[CCC]=>[CCC]=>NULL /* doesnt work, why? */
嗨,我正在尝试循环这个东西然后我意识到它得到了错误的结果。我隔离了我的程序,我发现输入是问题所在,我尝试了 scanf,但两者都不起作用。为什么我不能用回 char 数组来存储输入,请有人帮我解决这个问题。
最佳答案
问题是您正在分配指针。
pNode->word = word;
因为 pNode->word
总是指向 main 中 word
的更新值。列表中的每个节点都将具有相同的值。
你应该在 main 中复制 word
的内容,而不是分配指针。
node *newNode(char *word) {
node *pNode = (node*) malloc(sizeof(node));
pNode->word = malloc(strlen(word)+1);
strcpy(pNode->word, word);
pNode->next = NULL;
return pNode;
}
或者
node *newNode(char *word) {
node *pNode = (node*) malloc(sizeof(node));
pNode->word = strdup(word);
pNode->next = NULL;
return pNode;
}
注意:strdup
不是C
标准。
关于C Linked List char数组输入重用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53236665/