我有以下结构:
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[]'
请帮我纠正。 感谢。
答案 0 :(得分:2)
1。在struct Class
-
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 */
答案 1 :(得分:0)
C标准明确指出(6.7.2.1)在获取sizeof
结构时不计算灵活的数组成员:
特别是,结构的大小就像柔性阵列一样 成员被省略,除了它可能有更多的尾随填充 遗漏意味着。
如果动态分配内存,则只使用灵活的数组成员是有意义的。至于动态内存的所有其他情况,在分配的段上使用sizeof
运算符没有任何意义。
使用灵活数组成员students
时,必须将内存分配为:
struct Class* c = malloc( sizeof(*c) + n*sizeof(struct Student) );
意思是你已经知道了它的大小!它是n*sizeof(struct Student)
。