为何无法打印用户输入的年龄?结构体student[0]输出异常排查
问题分析与修复
错误原因
- 代码中
struct Students *student[10]是结构体指针数组,数组内的指针未初始化,属于野指针,直接通过student[0]->age访问内存会触发未定义行为(程序崩溃、输出异常等)。 void main(void)不符合C标准,main函数的标准返回类型应为int。
修复方案
有两种常见修复方式,可根据需求选择:
方式1:为指针分配堆内存(保留指针数组)
如果确实需要使用结构体指针数组,需先为指针分配内存空间:
#include <stdio.h> #include <stdlib.h> #include <string.h> struct Students { int age; int id; char name[30]; int grade; }; int main(void) { struct Students *student[10]; // 为第一个结构体指针分配内存 student[0] = malloc(sizeof(struct Students)); if (student[0] == NULL) { perror("内存分配失败"); return 1; } printf("Enter your Age: "); scanf("%d", &student[0]->age); printf("Age equals: %d", student[0]->age); // 释放内存,避免泄漏 free(student[0]); return 0; }
方式2:使用结构体数组(更简单的场景)
若不需要动态分配内存,直接声明结构体数组即可:
#include <stdio.h> #include <stdlib.h> #include <string.h> struct Students { int age; int id; char name[30]; int grade; }; int main(void) { struct Students student[10]; // 直接创建结构体数组 printf("Enter your Age: "); scanf("%d", &student[0].age); // 用.访问结构体成员 printf("Age equals: %d", student[0].age); return 0; }
内容的提问来源于stack exchange,提问作者0x0040Coder
相关产品推荐
相关产品推荐

