gpt4 book ai didi

更改链表中字符串的值

转载 作者:行者123 更新时间:2023-12-02 06:46:17 25 4
gpt4 key购买 nike

我是C的初学者,希望有人能帮助我。所以,我一直在尝试将字符串名称的值更改为另一个值,但是当打印列表时,当我使用 scanf 输入值时,字符串的值并没有改变。例如,如果我使用函数 push(&head, "Carlos") 手动插入值,name 的值会更改。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Node{
char *name;
struct Node *next;
};


void printList(struct Node *n){
while (n != NULL){
printf(" name: %s \n ", n->name);
printf("....................................\n");
n = n->next;
}
}

void push(struct Node **head_ref, char *name){
struct Node *new_node = (struct Node *)malloc(sizeof(struct Node));
new_node->name = name;

new_node->next = (*head_ref);

(*head_ref) = new_node;
}

int main(){
struct Node *head = NULL;

char name[20];

printf("Insert a name");
scanf("%s", name);

push(&head, name);

printf("Insert a new name");
scanf("%s", name);

push(&head, name);

push(&head, "Carlos");


printList(head);

return 0;
}

如果我像这样输入两个名字:“nadia”、“pedro”,输出将是这样的:

    Output:

Carlos
....................................
pedro
....................................
pedro
....................................

我想要的结果是这样的:

    Output:

Carlos
....................................
pedro
....................................
nadia
....................................

最佳答案

你应该使用 strcpy 在 c 中复制字符串。您必须在每个 new_node 中为 name 分配:

new_node->name = malloc(20*sizeof(char));
if(!new_node->name) {//handle error}
strcpy(new_node->name,name);

我在你的代码中看到:

 scanf("%s", name);

你应该改为(你可以看到 Disadvantages of scanf ):

 scanf("%19s", name);

或者您可以使用 fgets 代替:

fgets(name, sizeof(name), stdin);

关于更改链表中字符串的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61475703/

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