You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何无法打印用户输入的年龄?结构体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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 15:45:34