gpt4 book ai didi

c - 如何使用c在链表节点中传递两个参数?

转载 作者:太空宇宙 更新时间:2023-11-04 08:10:38 25 4
gpt4 key购买 nike

我正在学习如何在 C 语言中使用带链表的结构。所以我试图继续将节点插入到第一个位置。此外,每个节点包含两种不同的值,一种是字符数组,另一种是整数。一旦我插入一个值,然后打印出当前列表。我一遍又一遍地查看,但找不到哪里出了问题,因为我在插入函数中设置了 printf() 测试。我看到 new_node 是我当前插入的内容。

当我先插入一个 1 并打印出 a/1 时。但是当我插入另一个集合如 b 2 时,我很困惑,它打印出来了

b/2

b/1

这意味着第一个节点的名称随着插入新节点而改变,但数字没有改变。谁能看到这里发生了什么?

struct node{
char *name;
int numbers;
struct node *next;
};
struct node *list = NULL;

void printList(struct node *node){
while (node != NULL){
printf("%s/%d\n", node->name, node->numbers);
node = node->next;
}
}

void insert(struct node **list, char *name, int numbers){
struct node * new_node = malloc(sizeof(struct node));
new_node->name = name;
new_node->numbers = numbers;
//printf("......%s %d.........\n", new_node->name, new_node->numbers);
new_node->next = *list;
*list = new_node;
}

int main(){
......code for scanf() are omitted......
insert(&list, name, numbers);
printList(list);
}

最佳答案

您的问题是您指向每个节点的相同缓冲区。即使没有看到您删除的代码,我也可以猜到您正在读取同一 char 数组中的节点名称。您最好考虑按照建议使用 strdup() :

new_node->name = strdup(name);

确保在销毁节点时释放此指针。

关于c - 如何使用c在链表节点中传递两个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39801234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com