插入c后,最后一个节点中的数据替换先前节点中的数据

我哭了托尼

我正在尝试实现一个在链接列表的开头插入名称的功能。问题在于最后一个节点中的数据将覆盖先前节点中的数据。这是我从代码中获得的输出:

    /*
    Number of names to insert:
    3
    Name to insert: 
    Tony
    List is now Tony 
    Name to insert: 
    George
    List is now George George 
    Name to insert: 
    Charles           
    List is now Charles Charles Charles 
    */

请帮助我了解问题可能在哪里以及如何解决。这是代码。

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

    typedef struct node
    {
        char* word;
        struct node* next;
    }node;

    void insert(char* s);
    void print();

    node* head = NULL;

    int main(void)
    {
        int n;
        char s[20];
        puts("Number of names to insert:");
        scanf(" %i", &n);

        for (int i = 0; i < n ; i++)
        {
            puts("Name to insert: ");
            scanf(" %s", s);
            insert(s);
            print();
        }
    }

    void insert(char* s)
    {
        node* temp = malloc(sizeof(node));
        temp->word = s;
        temp->next = NULL;
        if (head == NULL)
        {
            temp->next = head;
            head = temp;
        }
        else
        {
            temp->next = head;
            head = temp;
        }

    }

    void print()
    {          
        node* temp = head;
        printf("List is now ");
        while (temp != NULL)
        {
            printf("%s ", temp->word);
            temp = temp->next;
        } 
        printf("\n");
    }
来自莫斯科的弗拉德

您需要为列表中插入的每个字符串分配内存。

该函数可以如下所示

void insert( const char *s )
{
    node* temp = malloc( sizeof( node ) );

    if ( temp != NULL )
    {
        temp->word = malloc( strlen( s ) + 1 );
        strcpy( temp->word, s );

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

当列表将要停止存在时,应为每个节点中的字符串释放分配的内存。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

两个部分,在Java中删除最后一个元素并替换节点中的两个元素

尝试读取 XMLfile 并仅使用 c# 从一个子节点中获取数据

尝试查询 XML 数据 - 节点中有一个空格

对一个节点中包含两个数据的链表进行排序

当先前的测试在我的双向链接列表中正常运行时,代码在节点中存储了错误的数据,并给了我一个OutOfMemoryError

在BST的节点中存储数据

根据前一个节点中的键值复制节点

如何从一组节点中提取最后一个元素?

访问节点中的ORM数据后快速回调

在节点中的mongodb更新后如何获取结果数组数据?

在networkx节点中有一个冒号

将多个节点合并到一个节点中的节点红色

数据节点中的文件传输-hadoop

如何索引内容节点中的 XML 数据?

如何从节点中的函数返回数据?

获取多个 firebase 节点中的数据总和

在节点中返回数据库值

从 XML 节点中提取数据

如何从嵌套节点中检索 xml 数据

从父节点中删除所有子节点,除了一个特定的,c# 中的 xml

使用Linq to XML和C#从其他同名节点中选择一个节点

如何在不同位置的具有相同名称的节点中获取最后一个值?

每次从映射节点中的目标消息中将一个元素插入到他的“父亲”的选择选项中

子节点中的XSL父节点数据

XSLT:在父节点中聚合子节点数据

XSLT可以将一个节点中的值复制到跨重复节点的另一个节点中

在另一个节点中具有相同名称的XML节点

Xpath查找另一个节点中部分匹配的节点值

在路由文件节点中包含一个js文件(不是节点混编)