C 获取结构中列表结构的大小
我有以下结构:C 获取结构中列表结构的大小,c,C,我有以下结构: struct Student{ char *name; int age; }; struct Class{ char *class_name; struct Student students[]; }; 和计数功能: int countStdInClass(struct Class *classA){ int sizeOfStd = sizeof(classA->students)/sizeof(classA->students[0]) return
struct Student{
char *name;
int age;
};
struct Class{
char *class_name;
struct Student students[];
};
和计数功能:
int countStdInClass(struct Class *classA){
int sizeOfStd = sizeof(classA->students)/sizeof(classA->students[0])
return sizeOfStd ;
}
编译时,出现以下错误:
invalid application of ‘sizeof’ to incomplete type ‘struct Student[]'
请帮我改正一下。
谢谢。1.在
结构类中
-
struct Student students[ ];
/* ^ you haven't given any size . */
在将元素用作sizeof
的操作数时,需要给出元素的数量。范例-
struct Student students[5]; // give any desired size
2.也在您的函数中int countStdInClass
-
int sizeOfStd = sizeof(classA->students)/sizeof(classA->students[0])
/* ^ ; missing */
C标准明确规定(6.7.2.1),当采用结构的
sizeof
时,不计算灵活数组成员:
特别是,结构的大小就像灵活的阵列
成员被省略,只是它的尾随填充可能比
这一遗漏意味着
只有在动态分配内存的情况下,使用灵活的数组成员才有意义。对于动态内存的所有其他情况,在分配的段上使用sizeof
操作符没有任何意义
使用灵活数组成员学生
时,必须将内存分配为:
struct Class* c = malloc( sizeof(*c) + n*sizeof(struct Student) );
意思是你已经知道尺寸了!它是
n*sizeof(struct Student)
这是一个灵活的数组成员,他不需要声明固定大小。@Lundin即使他需要它作为sizeof
的操作数时也不需要它?那么他可能不需要固定的数组成员。@ameyCU将sizeof与灵活的数组成员一起使用是没有任何意义的。@Lundin是的。如果他想使用sizeof
,则不需要固定数组成员。他需要指定尺寸。@ameyCU嗯,他需要知道自己在做什么。。。我得这么想。如果事实证明他对灵活数组成员一无所知,只是在玩“猜语法”,那么给出的任何建议都无济于事。