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

为何C语言函数中构建的roster_t结构体数组返回后为空?

问题原因分析

你的代码无法正常工作的核心问题是未更新返回的grade_roster结构体中的count字段:

  1. 你的roster_t结构体通过count成员标记有效学生的数量,外部逻辑判断数组是否为空、遍历学生时,都是基于这个字段的值,而非数组的实际填充情况。
  2. 你在函数中用i统计了匹配到的学生数量,也把对应学生的数据复制到了grade_roster.students数组中,但始终没有把i的值赋值给grade_roster.count。加上init_roster函数应该是将count初始化为0,所以返回的结构体count字段仍为0,外部调用时自然会认为这是一个空数组,哪怕students数组里已经有数据。

修复后的代码只需添加一行,同步count字段的值:

roster_t get_grade(roster_t * roster, int grade){
    roster_t grade_roster;
    init_roster(&grade_roster);

    int i = 0;
    for (size_t j=0; j < roster->count; j++) {
        if ( roster->students[j].grade == grade){ 
            grade_roster.students[i] = roster->students[j];
            i++;
        }
    }
    // 关键:将统计的有效学生数同步到count字段
    grade_roster.count = i;
    return grade_roster;
}

你改用辅助函数添加学生时能正常工作,是因为这类辅助函数内部会自动维护count字段的更新,帮你完成了“同步有效元素数量”的操作。

内容的提问来源于stack exchange,提问作者Caleb Renfroe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:25:18