将元素添加到链表(C)

时间:2015-04-19 12:59:40

标签: c linked-list structure

我想创建一个链接列表,我可以在以后添加更多元素,但我对当前代码的问题是所有以前的元素都被最后添加的元素覆盖。这是我的代码:

#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;
}

2 个答案:

答案 0 :(得分:5)

更改

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);

我将释放记忆作为读者的练习

答案 1 :(得分:3)

add中使用构造

temp->name=str;

它不会执行字符串复制,只需将temp->name指向str即可。您应该使用strcpy代替。像

这样的东西
temp->name = (char*) malloc(strlen(str)+1);
strcpy(temp->name, str);

在你的main函数中,你应该为变量str分配内存,然后才能在scanf中使用它。

char* str = (char *)malloc(255);
...
free(str);

char str[255];