C语言中的结构列表
我想创建一个包含跟随FIFO的人员结构的列表。 我创建了一个只有2个元素的列表。问题是当我打印列表时。即使我创建了两个元素,它也会打印三个元素C语言中的结构列表,c,list,C,List,我想创建一个包含跟随FIFO的人员结构的列表。 我创建了一个只有2个元素的列表。问题是当我打印列表时。即使我创建了两个元素,它也会打印三个元素 #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct element element ; struct person { char name[25], family[25]; int age ; }; stru
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct element element ;
struct person {
char name[25], family[25];
int age ;
};
struct element {
struct person p;
element *next ;
};
struct List{
element *first;
};
int main()
{
int n=2,i;
element *pre, *actuel, *e;
struct List *l=malloc(sizeof(l));
for(i=0;i<n;i++)
{
e=malloc(sizeof(e));
e->next=NULL;
printf("give name:\n");
scanf("%s",e->p.name);
printf("give family name:\n");
scanf("%s",e->p.family);
printf("donner l'age :\n");
scanf("%d",&e->p.age);
if(i==0)
{
l->first=e;
pre=e;
}else{
pre->next=e;
pre=e;
}
}
actuel=l->first;
while(actuel!=NULL)
{
printf("age is : %d \n",actuel->p.age );
printf("name is : %s \n",actuel->p.name );
printf("family name is : %s \n",actuel->p.family );
actuel=actuel->next;
}
return 0 ;
}
#包括
#包括
#包括
typedef结构元素;
结构人{
字符名称[25],家族[25];
智力年龄;
};
结构元素{
结构人p;
元素*下一个;
};
结构列表{
元素*第一;
};
int main()
{
int n=2,i;
元素*pre、*actuel、*e;
结构列表*l=malloc(sizeof(l));
对于(i=0;不精确=NULL;
printf(“给出名称:\n”);
scanf(“%s”,e->p.name);
printf(“给出姓氏:\n”);
scanf(“%s”,e->p.family);
printf(“唐纳年龄:\n”);
scanf(“%d”,&e->p.age);
如果(i==0)
{
l->first=e;
pre=e;
}否则{
pre->next=e;
pre=e;
}
}
actuel=l->第一;
while(actuel!=NULL)
{
printf(“年龄是:%d\n”,actuel->p.age);
printf(“名称是:%s\n”,actuel->p.name);
printf(“姓氏为:%s\n”,actuel->p.family);
actuel=actuel->next;
}
返回0;
}
请问哪里有问题
谢谢。第一个错误是
struct List *l=malloc(sizeof(l));
应该是
struct List *l=malloc(sizeof(struct List));
因为l是指向结构的指针,指针的大小是固定的(取决于体系结构,与它们指向的对象无关)
同样的错误后来实际上是问题的根源:
e=malloc(sizeof(e));
应该是
e=malloc(sizeof(struct element));
您必须为结构大小分配,而不是为指向结构大小的指针分配
sizeof(l)
将返回指向结构的指针的大小,而sizeof(*l)
将返回实际结构的大小,其中l
是结构的类型
更换这些部件
struct List *l = malloc(sizeof(l));
e = malloc(sizeof(e));
致:
你们也可以用下面的方法来做,但上面的例子更通用,避免了将来的问题
struct List *l = malloc(sizeof(struct List));
e = malloc(sizeof(struct element));
你认为(e)的尺寸是多少是元素的大小吗?提示:它不是元素的大小。在我的C代码标准中,尽管语言可能允许,但给typedef元素与结构相同的名称会导致混淆和问题-总是使用不同的名称,例如typedef struct element元素;您是否确实尝试过通过调试器运行它?这是错误的称为调试。在现实生活中,名字或姓氏的最大长度是多少?哈哈。这只是为了测试@barnyThank你的评论,但问题仍然是一样的为什么要麻烦malloc列表?只有一个,只需声明一个列表l;避免了使用malloc-to-be带来的痛苦、恶化和引入错误的风险避免。我喜欢这个家伙如何抓取一个解决方案,并将其作为他们的解决方案呈现出来,从而成为被接受的解决方案。是的!就是这样。多亏了我个人,我更愿意让OP自己解决这类问题,最好是通过分解问题或更多地使用调试器检查问题,而不是将问题交给他处理盘子。
struct List *l = malloc(sizeof(struct List));
e = malloc(sizeof(struct element));