所以我试图理解链表如何与存储字符串类型的数据一起工作。据我所知,链表使用数据结构以一种时髦的方式存储数据,因此您可以轻松地在其中输入新的数据,删除它们,并根据需要重新排列它们。我的问题是,我需要从用户处取一个字符串,在链接列表中为它指定一个位置,然后转到列表中的下一个节点并再次执行相同的操作。然而,此时,我只是尝试从用户获取一个字符串,将其存储在new_node值中,(或者(* new_node).value用于那些根据指针而不是链接列表思考的)和打印出来。 main只是要求用户输入字符串,add_to_list func接受输入并将其添加到链表的开头,print func只打印链接列表中的内容。问题在于我的理解(至少我认为是问题)是我为数据结构分配输入值的点,new_node-> value = * n应该只是使值包含输入字符串因为它只是给另一个数组指定* n所包含的值,不幸的是,并非如此,我不确定为什么会这样。这是为了简单起见的代码。
编辑:感谢大家的回答和解释为什么在处理将字符数组的值分配给另一个数组时strcpy是必要的,即:strings!
#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);
}
}
&#13;
答案 0 :(得分:3)
使用strcpy
而不是将char
分配给不编译的数组。数组不是左值,如果没有下标,则无法分配,因此左侧任何带有数组名称的赋值都不会编译。变化
new_node->value = *n;
到
#include <string.h>
...
strcpy(new_node->value, n);
答案 1 :(得分:1)
您不能将字符串指定为普通整数赋值。
无论何时要复制数组,都必须使用strcpy
或strcpy
等库函数。在你的情况下,它的字符数组,即字符串,你必须使用char *strcpy(char *dest, const char *src);
。
strcpy(new_node->value,n);
因此,在您的代码中,它必须与
相似new_node->value=*n;
而不是strcpy
使用ImageSource.FromFile("myimage.jpg");'
的原因在下面的链接中提到