为什么我的函数中内置的对象数组从函数中返回空

问题描述 投票:0回答:1

我有以下结构

#define MAX_NAME_LENGTH 20
#define MAX_STUDENTS 20

typedef struct {
   uint8_t grade;
   char name[MAX_NAME_LENGTH];
} student_t;

typedef struct {
   size_t count;
   student_t students[MAX_STUDENTS];
} roster_t;

我构建了一个函数来创建某个年级的学生子数组。但是,我很困惑为什么以下内容不起作用。

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++;
        }
    }
    return grade_roster;
}
.
.
.
// Called later
roster_t actual = get_grade(&roster, desired_grade);

当我添加一些打印进行测试时,我可以看到它似乎将学生添加到新的grade_roster中,但是当我从函数返回时,我得到一个空数组。

此后,我更新了函数以使用添加学生的辅助函数,效果很好,当它从函数返回时,我最终得到了一个填充数组,但这让我想知道为什么第一个解决方案不起作用。

感谢您的任何解释。

arrays c struct
1个回答
0
投票

您忘记设置

grade_roster.count

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

    size_t i = 0; /* use size_t instead of int for consistency */
    for (size_t j=0; j < roster->count; j++) {
        if ( roster->students[j].grade == grade){ 
            grade_roster.students[i] = roster->students[j];
            i++;
        }
    }
    grade_roaster.count = i; /* add this */
    return grade_roster;
}
© www.soinside.com 2019 - 2024. All rights reserved.