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

C语言录入学生信息输出乱码且年龄为0是什么原因

程序运行异常的原因分析

本次异常是多个内存操作错误共同导致的,具体原因如下:

  • 内存分配完全不符合需求
    • 初始化阶段countOfStudents初始值为0,执行student* students = malloc(countOfStudents);仅申请了0字节内存,完全无法存储学生结构体数据。
    • 每次新增学生前没有对students指向的堆内存执行扩容操作,直接向students[countOfStudents]写入数据属于非法越界写内存,会随机破坏内存中的其他数据,直接导致输出乱码、年龄字段取值异常。
    • 内存申请时未乘以单个student结构体的大小,即便countOfStudents不为0,分配的空间也远小于存储对应数量学生需要的内存。
  • 结构体赋值逻辑错误
    代码中struct Student student = {*name, age};的初始化写法错误:*name是取输入姓名字符串的第一个字符,只会给结构体的name数组第一个元素赋值,数组剩余的49个元素都是未初始化的垃圾值,最终拷贝出来的姓名字段自然会出现乱码。
  • 不规范写法隐患
    scanf("%s", &name);写法错误,name本身就是字符数组的首地址,不需要额外加取地址符&,该写法存在潜在的内存访问异常风险。

内容的提问来源于stack exchange,提问作者Suleyman Selcuk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:39:03