错误在哪里?,应该打印出用户输入的年龄给struct的student 0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Students
{
int age;
int id;
char name[30];
int grade;
};
void main(void)
{
struct Students *student[10]; // Array of Pointers to Structs.
// Containing (10) Pointers (student) to Structs. To save memory unlike the normal array
printf("Enter your Age: ");
scanf("%d", &student[0]->age);
printf("Age equals: %d", student[0]->age);
}
1条答案
按热度按时间5jdjgkvh1#
您有一个指向
Students
结构体的10个 * 指针 * 的数组,但是每个指针都没有初始化。因此,当您解引用这些指针中的任何一个时,就会调用未定义的行为。
您应该为每个指针动态分配内存,或者将数组更改为:
这会自动为10个
Students
结构体分配堆栈空间。此时,您可以使用以下语句读取age:作为旁注,我认为你的复数形式是反的。如果你的结构体
Students
只包含一个学生的信息,那么Student
会是一个更好的名字,students
会是一个适合这些结构体数组的名字。您还应该检查
scanf
的返回值。如果成功读取了单个整数,scanf
将返回1
。不要假设用户将输入有效信息。检查scanf
的返回值可以让您选择在可能产生进一步运行时错误之前处理该情况。