我想了解链接列表的工作原理;并且在更改来自导师的示例代码时,我得到'左操作数必须是l值'错误...这是我的代码。任何帮助表示赞赏:)
struct node
{
char name[20];
struct node *next;
};
/*Function to allocate memory and initialize node - returns pointer to node*/
struct node*mknode(char *str)
{
struct node *np;
np = (struct node*)malloc(sizeof(struct node));
if(np)
{
np->name = *str;
np->next = NULL; /*sets the 'next' pointer to last list item to NULL*/
}
return np;
}
int main(void)
{
int i,menu,k=1,number;
char name[20];
char *str = name;
struct node* n;
struct node *head=NULL;
printf("Link Lists\n 1-Enter Data into lists\n 2-Display All List Items\n 3-Quit Program :(\n");
do
{
printf("\nPlease choose an option: ");
scanf("%d",&menu);
switch (menu)
{
case 1:
printf("\nPlease Enter A Number:");
scanf("%d",&name);
n=mknode(str); /*create new node with i as data*/
append_node(&head,n); /*add new node to end of list*/
break;
这是我收到错误的地方
np->name = *str;
将结构数据类型从整数更改为char
感谢
答案 0 :(得分:3)
在C数组中不是可修改的左值,即你不能分配给数组。如果我理解你正在尝试做什么,你可以尝试:
strcpy(np->name, str);
如果str
不是受信任的字符串(如果之前未对其进行验证),则可以使用memcpy
代替strcpy
。
答案 1 :(得分:1)
此声明中有两个错误
np->name = *str;
第一个name
被声明为一个数组,你不能通过赋值来改变数组的位置。相反,您必须使用name
strcpy
strcpy_s( np->name, sizeof(name), str );
第二个错误是你在你的赋值中derefencing字符串str
,当你解除字符串*str
时你只是复制字符串的第一个字符,就像写{{1} }
您也可以将name声明为char指针,但是您需要分配并稍后释放该字符串:
str[0]