繁体   English   中英

如何在C的链表中存储字符串类型的数据?

[英]How do you store string type data in a linked list in C?

因此,我试图了解链接列表如何与存储字符串类型的数据一起工作。 据我所知,链表使用一种数据结构以某种时尚的方式存储数据,因此您可以轻松地在其中输入新数据,删除它们并根据需要重新排列它们。 我的问题是,我需要从用户处获取一个字符串,在链接列表中为其分配一个位置,然后移至列表中的下一个节点,然后再次执行相同的操作。 但是,在这一点上,我只是想从用户那里获取一个字符串,将其存储在new_node值中(或对于您认为是指针而不是链接列表的人来说,则为(* new_node).value)并打印它出。 主体只要求用户输入字符串,add_to_list func接受输入并将其添加到链接列表的开头,而print func只是打印链接列表中的内容。 问题出在我的理解上(至少我认为是问题所在)是我为数据结构分配输入值的地方,new_node-> value = * n应该使该值包含输入字符串,如下所示:它只会给另一个数组* n包含的指针的值,不幸的是事实并非如此,我不确定为什么会这样。 为了简单起见,以下是代码。

编辑:谢谢大家的回答,以及在将字符数组的值分配给另一个数组即字符串时为什么需要strcpy的解释。

 #include <stdio.h> #include <stdlib.h> #define LARGE 10 struct node *add_to_list(struct node *list, char *n); struct node{ char value[LARGE+1]; struct node *next; }; struct node *first = NULL; void print(void); int main(void) { char job[LARGE],*p; printf("Please enter printing jobs\\n"); scanf ("%s", job); p=&job[0]; first = add_to_list(first, p); print(); return 0; } struct node *add_to_list(struct node *list, char *n) { struct node *new_node; new_node = malloc(sizeof(struct node)); if (new_node == NULL) { printf("Error: malloc failed in add_to_list\\n"); exit(EXIT_FAILURE); } new_node->value = *n; new_node->next = list; return new_node; } void print(void){ struct node *new_node; for(new_node=first;new_node!= NULL; new_node=new_node->next){ printf("%s\\n",new_node->value); } } 

使用strcpy而不是将char分配给无法编译的数组。 数组不是左值,因此不能在不带下标的情况下分配给数组,因此,左侧仅带有数组名称的任何赋值都不会编译。 更改

new_node->value = *n;

#include <string.h>

...

strcpy(new_node->value, n);
  1. 您不能将字符串分配为普通整数分配。

  2. 每当您要复制数组时,都必须使用memcpystrcpy类的库函数。 在您的情况下,它的字符数组(即字符串)必须使用strcpy

  3. 用法char *strcpy(char *dest, const char *src);

因此在您的代码中,它必须类似于strcpy(new_node->value,n); 而不是new_node->value=*n;

下面的链接中提到了使用strcpy原因

为什么使用strcpy函数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM