在做结构体的时候用vs输入的答案,但vs还是一直报错


#include<stdio.h>
#include<stdlib.h>
typedef struct student ss;
struct student
{
    char id[20];
    char name[25];
    int score[3];
};
void Input(int n, ss* p);
void Output(int n, ss* p);
int main()
{
    int N;
    scanf_s("%d", &N);
    ss* p = (ss*)malloc(sizeof(ss)*N);
    Input(N, p);
    Output(N, p);
    free(p);
    return 0;
}
void Input(int n, ss* p)
{
    for (int i = 0; i < n; i++)
    {
        scanf_s("%s%s%d%d%d\n", p[i].id, p[i].name, &p[i].score[0], &p[i].score[1], &p[i].score[2]);
    }
    return;
}
void Output(int n, ss* p)
{
    for (int i = 0; i < n; i++)
    {
        printf("%s,%s,%d,%d,%d\n", p[i].id, p[i].name, p[i].score[0], p[i].score[1], p[i].score[2]);
    }
    return ;
}

vs一直报错Input中scanf_s那一句一直说:0x7BF5D4EC (ucrtbased.dll)处(位于 结构体成绩记录(答案).exe 中)引发的异常: 0xC0000005: 写入位置 0x0107E000 时发生访问冲突。
我输入的是正确答案,但是我自己输入自己代码的时候也是一直报这个错误,为啥啊。

改了下

img


 
#include<stdio.h>
#include<stdlib.h>
typedef struct student ss;
struct student
{
    char id[20];
    char name[25];
    int score[3];
};
void Input(int n, ss* p);
void Output(int n, ss* p);
int main()
{
    int N;
    scanf("%d", &N);
    ss* p = (ss*)malloc(sizeof(ss)*N);
    Input(N, p);
    Output(N, p);
    free(p);
    return 0;
}
void Input(int n, ss* p)
{
    for (int i = 0; i < n; i++)
    {
        scanf("%s%s%d%d%d\n", p[i].id, p[i].name, &p[i].score[0], &p[i].score[1], &p[i].score[2]);
    }
    return;
}
void Output(int n, ss* p)
{
    for (int i = 0; i < n; i++)
    {
        printf("%s,%s,%d,%d,%d\n", p[i].id, p[i].name, p[i].score[0], p[i].score[1], p[i].score[2]);
    }
    return ;
}