c语言返回3221225477

写的学生成绩管理系统,还没写完,只写个1个功能两个函数,运行有异常,返回值为3221225477
代码如下

struct Student {
    
    char num[10];//学号
        char name[15];//姓名 
        char major[10];//专业computer,softwear,network
        int classNo;//班级 
        int score[3];//3门课的成绩  
        int sum;//3门课的总成绩 
        struct Student *next;//指针    88u

    
    
    
};
int n,a;
struct Student * input();

void save(struct Student 
```c
struct Student * input()
{
    n=0;
    struct Student *head;
    struct Student *p1,*p2;
    head=(struct Student *)malloc(len);
    printf("请输入学生人数:");
    scanf("%d",&a);
    printf("请录入这%d名学生的信息:\n",a);
    while(n<a)
    {
        p1=(struct Student*)malloc(sizeof(len));
        scanf("%s-%s-%s-%d-%d-%d-%d",&p1->num,&p1->name,&p1->major,&p1->classNo,&p1->score[0],&p1->score[1],&p1->score[2]);
        p1->sum=0;
        p1->sum=p1->score[0]+p1->score[1]+p1->score[2];
        n++;
        if(n==1)
        {
            head=p1->next;
            
        }
        else
        {
            p2->next=p1;
            p2=p1;
            
            
            
        }
        
        
    }
    p2->next=NULL;
    
    
    
    
    
    
    return(head);
}
void save(struct Student *head)
{
    struct Student *p1;
    char s[15];
    p1=head->next;
    FILE *fp;
    printf("亲输入要建立的文件名:\n");
     scanf("%s",&s);
     if((fp=fopen("s.txt","wb"))==NULL)
     {
         
         printf("打开文件失败");
         exit(0); 
     }
    while(p1!=NULL)
    {
        fwrite(p1,len,1,fp);
        p1=p1->next;
    }
    
    
    
}


```c
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#define len  sizeof(struct Student)
#include"声明.h"
#include"自定义函数.h"



int main(void) 
{
    char s[15];
    
    
    while(1)
    {
        printf("请输入功能编号完成相应功能\n");
        printf("1.输入学生信息并保存\n");
        printf("2.从文件中读取学生信息,并建立链表\n");  
        printf("3.按学号删除学生信息\n"); 
        printf("4.按学号插入学生信息\n"); 
        printf("5.显示当前文件信息\n"); 
        printf("6.查找总成绩最高的学生\n");
        printf("7,寻找指定学号或姓名的学生并修改该学生信息 \n");
        printf("8.查找某个专业、某门课程的成绩小于某个分数的学生\n");
        printf("9.删除某个班级、某门课程的成绩小于某个分数的学生\n");
        printf("10.按照姓名排序\n");
        printf("11.保存当前信息\n");
        printf("其他,推出系统\n");


int x;
struct Student *h;
printf("亲输入编号:");
scanf("%d",&x); 
switch(x)
{
    case(1):h=input();save(h);break;
        
        
    
    
    
    
    
    default: break;
}
    }    
    
    
 
    return 0;
}

运行结果

img

我感觉你这个sizeof(len)有问题

p1=(struct Student*)malloc(sizeof(len));

scanf("%s-%s-%s-%d-%d-%d-%d",&p1->num,&p1->name,&p1->major,&p1->classNo,&p1->score[0],&p1->score[1],&p1->score[2]);
这里,
scanf("%s-%s-%s-%d-%d-%d-%d",p1->num,p1->name,p1->major,&p1->classNo,&p1->score[0],&p1->score[1],&p1->score[2]);

head=(struct Student *)malloc(len);
天外飞仙的跑出来一个len

改一下,
你申请头结点应该这样,head=(struct Student )malloc(sizeof(struct Student));
同理申请节点也应该是 p1=(struct Student
)malloc(sizeof(struct Student));
你的头结点也是不应该变的,应该定义一个全局变量头指针,将插入的子节点续在头结点后面
你应该是大二才学C语言吧,不要一开始挑这么高难度的,你先学基础,先练习简单例子,你这问题太多了,明显基础不牢!