int main()
{
typedef struct datetime
{
char year[10];
char month[10];
char day[10];
char hours[10];
char minutes[10];
}datetime;
typedef struct Student
{
char Stu_Id[20];
char Stu_Name[10];
char Stu_Sex[10];
char Dor_Id[10];
datetime Stu_Enr[10];
datetime Stu_Birth[10];
char Stu_Study[10];
char Stu_Class[10];
char Stu_Polit[10];
char Stu_Add[50];
char Stu_Tel[10];
char Stu_Sta[10];
char Stu_Des[50];
}Student;
Student *p;
scanf("%s",p->Stu_Enr->year);
printf("%s",p->Stu_Enr->year);
}
这样的话输入字符,按回车后程序会崩溃
问题不在结构体吧,Student* p 未初始化呀,应该 Student * p = new Student;
Student* p 未分配内存
不知道你用的什么编译器,这个错误应该编译不过去,是指针没有初始化,有两种改法:
Student *p =new Student;
Student p = (Student)malloc(sizeof(Student));
第一种不行的话 可以用第二种
Student* p 未初始化
没有给p指针分配相应的内存
Student* p是空指针。初始化该指针,通过new或malloc
结构体是空指针,要创建(new或malloc)一个新指针
首先你得明白malloc函数的作用;malloc函数是在内存中找到一个合适大小的内存空间来存储数据,并让指针指向这个空间的首地址。它的意义是在创建数组时,可以创建动态数组。
比如 int a[n],*p;p=a;是不合法的。而int *p;p=(int *)malloc(n*sizeof(int))却可以实现创建这样一个长度为n的数组
p是一个空指针,没有办法赋值的,直接Student p
student *p没有分配内存
p是一个空指针,没有办法赋值的,直接Student p,student *p没有分配内存
p初始时是一个野指针,其指向可以说是任意的,如果直接引用可能会越界访问内存,而自然,一个程序必然有它在内存中的一定的段,越界访问是不被允许,于是它就崩溃了呗。
*p 是一个空指针;