C语言结构体输入文件时出错

C语言初学者,在写一个程序编辑一个结构体,然后输入进文件的过程
出现的问题,就是它提示Run-Time Check Failure #2 - Stack around the variable 'stu' was corrupted.
然后输出的TXT文件有10MB之大,求问是怎么回事。


#include<stdio.h> 
#include <cstdlib>
#define N 100
struct student
{
    char name[200];
    char no[200];
    char partname[100];
    char partno[200];
    char score[100];
    struct student* next;
};
int main()
{
    int i{};
  
    struct student stu[N];
    int num1;//需要输入的学生人数
    printf("请输入需要录入人数:\n");
    scanf_s("%d", &num1);
    if (N < num1)//动态录入数据
    {
        num1 = N;
        printf("最大人数为N=100!\n");
    }
    for (int i = 0; i < num1; i++)
    {

        printf("\n请输入第%d个学生的信息", i + 1);
        printf("\n学生姓名为:"); scanf_s("%s", stu[i].name, sizeof(stu));
        printf("\n学生学号:"); scanf_s("%s", stu[i].no, sizeof(stu));
        printf("\n该学生的零件的名称:"); scanf_s("%s", stu[i].partname, sizeof(stu));
        printf("\n该学生的零件编号:"); scanf_s("%s", stu[i].partno, sizeof(stu));
        printf("\n该学生的得分:"); scanf_s("%s", stu[i].score, sizeof(stu));

    }
    student stuu[N];
    FILE* fpp;
    fopen_s(&fpp, "期末大作业三.txt", "rb");
    fread(stuu, sizeof(student), N, fpp);
    fclose(fpp);
}
运行结果及报错内容

img

img


文件大到打不开= =

我的解答思路和尝试过的方法
我想要达到的结果

修改处见注释,供参考:

#include<stdio.h> 
#include <cstdlib>
#define N 100
struct student
{
    char name[200]; //这几个字符串数组设置太大了,不需要这么长的字符串。
    char no[200];
    char partname[100];
    char partno[200];
    char score[100];
    struct student* next;
};
int main()
{
    int i{};

    struct student stu[N];
    int num1;//需要输入的学生人数

    printf("sizeof(struct student)=%d\n", sizeof(struct student));//看看结构体大小

    printf("请输入需要录入人数:\n");
    scanf_s("%d", &num1);
    FILE* fwp;
    fopen_s(&fwp, "期末大作业三.txt", "wb");
    if (fwp == NULL)  return -1;
    if (N < num1)//动态录入数据
    {
        num1 = N;
        printf("最大人数为N=100!\n");
    }
    for (int i = 0; i < num1; i++)
    {
        printf("\n请输入第%d个学生的信息", i + 1);
        printf("\n学生姓名为:"); scanf_s("%s", stu[i].name, sizeof(stu[i].name)); //scanf_s("%s", stu[i].name, sizeof(stu));
        printf("\n学生学号:"); scanf_s("%s", stu[i].no, sizeof(stu[i].no));//修改
        printf("\n该学生的零件的名称:"); scanf_s("%s", stu[i].partname, sizeof(stu[i].partname));//修改
        printf("\n该学生的零件编号:"); scanf_s("%s", stu[i].partno, sizeof(stu[i].partno));//修改
        printf("\n该学生的得分:"); scanf_s("%s", stu[i].score, sizeof(stu[i].score));//修改
    }
    fwrite(stu, sizeof(struct student), num1, fwp);
    fclose(fwp);

    student stuu[N];
    FILE* fpp;
    fopen_s(&fpp, "期末大作业三.txt", "rb");
    if (fpp == NULL)  return -1;
    fread(stuu, sizeof(struct student), num1, fpp);
    fclose(fpp);
    for (int i = 0; i < num1; i++)
        printf("%s %s %s %s %s\n", stuu[i].name, stuu[i].no, stuu[i].partname, stuu[i].partno, stuu[i].score);
    return 0;
}

read函数用于从文件流中读取数据,其函数原型为:
size_t fread(void* buffer, size_t size, size_t count, FILE*stream);

【参数设置】

  1. buffer为接收数据的地址,对于fread来书是要读出数据的地址,即数据保存的地址
  2. size是要读出内容的单字节数。
  3. count是要进行读出size字节的数据项的个数。
  4. stream为目标文件指针。
    你读太多了吧