向链表添加元素(C)

add element to a linked list(C)

我想创建一个 link 列表,稍后我可以添加更多元素,但当前代码的问题是所有先前的元素都被最后一个元素覆盖 added.here是我的代码:

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

struct node {
    char *name;
    struct node *next;
}*head;



void add( char *str ) {
    struct node *temp;
    temp=(struct node *)malloc(sizeof(struct node));
    temp->name=str;

    if (head== NULL) {
        head=temp;
        head->next=NULL;

    } else {
        temp->next=head;
        head=temp;
    }
}

void  display(struct node *r) {
    r=head;
    if(r==NULL)
        return;

    while(r!=NULL) {
        printf("%s ",r->name);
        r=r->next;
    }

    printf("\n");
}

int  main()
{
    char *str;
    struct node *n;
    head=NULL;
    while(scanf("%s",str) == 1) {
        add(str);
        display(n);
    }

    return 0;
}

改变

int  main()
{
  char *str;

int  main()
{
  char str[100];  // Or some other value to give scanf somewhere to put the data

然后在添加(假设这个功能在你的设置中可用)

temp->name=strdup(str);

我将释放内存留作 reader

的练习

在你的add中你使用构造

temp->name=str;

它不执行字符串复制,只是让temp->name指向str。您应该改用 strcpy。像

temp->name = (char*) malloc(strlen(str)+1);
strcpy(temp->name, str);

并且在您的主函数中,您应该先为变量 str 分配内存,然后再在 scanf.

中使用它
char* str = (char *)malloc(255);
...
free(str);

char str[255];