【发布时间】:2016-03-04 21:08:04
【问题描述】:
所以我试图了解链表如何存储字符串类型的数据。据我所知,链表使用数据结构以一种有点时尚的方式存储数据,因此您可以轻松地在其中输入新数据,删除它们,并根据需要重新排列它们。我的问题是,我需要从用户那里获取一个字符串,在链接列表中为其分配一个位置,然后移动到列表中的下一个节点并再次执行相同的操作。然而,在这一点上,我只是试图从用户那里获取一个字符串,将它存储在 new_node 值中(或者 (*new_node).value 对于那些考虑指针而不是链表的人)并打印它出去。 main 函数只是要求用户输入字符串,add_to_list 函数获取输入并将其添加到链表的开头,而 print 函数只是打印链表中的任何内容。问题在于我的理解(至少我认为是问题)是我为数据结构分配输入值的点, 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);
}
}
【问题讨论】:
-
问题或故事?
-
我想我还不够清楚,问题是如何在代码 new_node->value=*n 中为输入字符串赋值。为什么那个代码不正确?
-
@Senglish 您不能分配给这样的数组。使用
strcpy。strcpy(new_node->value,n); -
这在大多数情况下都有效。你会@ameyCU 介意解释为什么 strcpy 有效,而不是仅仅做我所拥有的吗?编辑:我收到与 strcpy 的使用有关的警告,其中 (new_node->value,n) 解释它是类型为 'char *(char, *const char *) 的隐式库函数。这是想向我指出什么?我将指针复制到变量而不为下一个节点分配值的事实?
-
@Senglish 只是您将值直接分配给数组。但是你不能这样做。因此,这个函数
strcpy存在用于复制字符串。
标签: c pointers linked-list