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嗯,他需要知道自己在做什么。。。我得这么想。如果事实证明他对灵活数组成员一无所知,只是在玩“猜语法”,那么给出的任何建议都无济于事。