C语言新手有几个小问题求解,关于校通讯录的输入函数有关问题

C语言新手有几个问题求解,关于校通讯录的输入函数问题
想使用自己定义的Stu_input函数来完成数据录入的工作,结果编译时提示Stu_input函数那里出错。自己又找不到到底哪里出错了。把Stu_input整个函数注释掉之后编译时不会报错了,但运行又会报错。新人第一帖,请各位高手给指点指点

#include<stdio.h>
#include<stdlib.h>
typedef struct{
char id[5]; //学生学号
char name[11]; //学生名字
int age; //学生年龄 
int math; //数学成绩 
int eng; //英语成绩 
int ds; //数据结构成绩
int os; //操作系统成绩
}Student_type;

void Stu_print(Student_type print){ //按顺序输出数组内各个数据
printf("Student id: %s\n",print.id[5]);
printf("Student name: %s\n",print.name[11]);
printf("Student age: %d\n",print.age);
printf("Student math: %d\n",print.math);
printf("Student eng: %d\n",print.eng);
printf("Student ds: %d\n",print.ds);
printf("Student os: %d\n",print.os);
}

void  Stu_input(Student_type &dat){
printf("Please input student's id: ");
scanf("%s",dat.id);
printf("Please input student's name: ");
scanf("%s",dat.name);
printf("Please input student's age: ");
scanf("%d",&dat.age);
printf("Please input student's math: ");
scanf("%d",&dat.math);
printf("Please input student's eng: ");
scanf("%d",&dat.eng);
printf("Please input student's ds: ");
scanf("%d",&dat.ds);
printf("Please input student's os: ");
scanf("%d",&dat.os);
}

int main(){
int i,stunum=0;
Student_type *data;
printf("Input stunum: ");
scanf("%d",&stunum); //记录需要开辟的空间
data=(Student_type *)malloc(stunum*sizeof(Student_type));
for(i=0;i<stunum;++i){
Stu_input(*(data+i));
}
for(i=0;i<stunum;++i){
Stu_print(*(data+i));
}
free(data);
return 0;
}
C input 通讯录

------解决方案--------------------
1、
void Stu_print(Student_type print){    //按顺序输出数组内各个数据
    printf("Student id: %s\n",print.id[5]);
    printf("Student name: %s\n",print.name[11]);


越界,print.id和print.name就行了;
2、Student_type *data指向的是一个student,你想声明一组要用Student_type **data,
3、至于input没看出错来;
------解决方案--------------------
我在vc2005里进行调试了下,没问题,我这没有vs2012的环境,很抱歉。看你在4楼所描述的错误信息,你自己可以试着修改下。
全部代码如下:

#include<stdio.h> 
#include<stdlib.h> 
typedef struct

char id[5];     // 学生学号 
char name[11];  // 学生名字 
int age;       // 学生年龄  
int math;      // 数学成绩  
int eng;       // 英语成绩  
int ds;        // 数据结构成绩 
int os;        // 操作系统成绩 
}Student_type; 

void Stu_print(Student_type &print) // 传引用
{    //按顺序输出数组内各个数据 
printf("Student id: %s\n",print.id); // 非print.id[5],print.id[5]表示id字符数组中的第5个元素,如果你的id为:123,就不会有id[5]这个元素被打印出来。
printf("Student name: %s\n",print.name); // 非print.name[11]
printf("Student age: %d\n",print.age);