初始化嵌套在C中结构数组中的结构数组



目标是将一个结构的数组包含在另一个结构中的另一个数组中。两个结构数组都应该分别声明和初始化。类似地提出的问题和答案只有我问题的一个组成部分,但没有这个或类似的组合。我在这里添加的代码只是一个简化的示例。所有数组大小和元素在执行之前都是已知的。

这是示例代码,无法编译"分段错误":

#include <stdio.h>
#include <string.h>
struct student_course_detail
{
int  course_id;
char course_name[50];
};
struct student_detail 
{
int id;
char name[20];
// structure within structure
struct student_course_detail *course[2]; 
}stu_data[2], *stu_data_ptr[2];

struct student_course_detail course_data[2] = {
{71145, "Course 1"}, 
{33333, "Course 2"},
}; 
struct student_detail stu_data[2] = {
{1, "Anna", &course_data[1]},
{2, "Tom", &course_data[2]}
};

int main() 
{
stu_data_ptr[2] = &stu_data[2];
printf(" Id is: %d n", stu_data_ptr[0]->id);
printf(" Name is: %s n", stu_data_ptr[0]->name);

printf(" Course Id is: %d n", 
stu_data_ptr[0]->course[0]->course_id);
//printf(" Course Name is: %s n", 
//                 stu_data_ptr[0]->course[0]->course_name);
//printf(" Course Id is: %d n", 
//                     stu_data_ptr[0]->course[1]->course_id);
//printf(" Course Name is: %s n", 
//                  stu_data_ptr[0]->course[1]->course_name);
return 0;
}

链接到代码示例:https://www.onlinegdb.com/Hk2NQ42OU

结构成员course是指向struct student_course_detail的两个指针的数组。

从您尝试初始化它的方式来看,它不应该是一个数组,而是一个指向struct student_course_detail:的普通指针

struct student_course_detail *course;  // Pointer to a single student_course_detail structure

您在其他地方也有类似的问题(stu_data_ptr(。

另外,不要忘记数组索引是基,因此&course_data[2]超出了course_data数组的范围。

定义一个包含n个元素的数组时,元素的索引范围从0到n-1。

因此,在这种情况下,所有数组的大小都是2,因此您所拥有的元素都由0和1索引。

例如,这是非法的:

stu_data_ptr[2] = &stu_data[2]; //illegal

你可以做:

stu_data_ptr[1] = &stu_data[1];

stu_data_ptr[0] = &stu_data[0];//use this, since you use stu_data_ptr[0] later

最新更新