while循环里的空间开辟加了去判定也还是说他批不了。

struct studentcreat(void)//定义动态链表函数{ struct student head; struct student* p1, * p2; n = 0; head = NULL; printf("请输入学生信息:学号,姓名,成绩:\n"); p1 = p2 = (struct student*)malloc(LEN); if (p1) { scanf_s("%ld,%s,%f", &p1->num,/sizeof(9),/ &p1->name[20],/sizeof(19),/ &p1->score/, sizeof(3)/); head = NULL; while (p1->num != 0) { n = n + 1; if (n == 1) head = p1; else p2->next = p1; p2 = p1; p1 = (struct student*)malloc(LEN); scanf_s("%ld,%s,%f", &p1->num,/sizeof(9),/ &p1->name[20], /sizeof(19),/ &p1->score/, sizeof(3)/); } p2->next = NULL; } return head;}