3
下面的代码有效吗?在另一个结构中具有一个灵活数组成员的结构
struct foo {
int a;
int b[];
};
struct bar {
int c;
struct foo d;
};
struct bar *x = malloc(sizeof(struct bar) + sizeof(int [128]));
它似乎确定给我,但我有点怀疑,因为如果我这样做编译器不抱怨:
struct bar {
struct foo d;
int c;
};
@Shahbaz:否,'INT B []'是*不*一样'INT * B'。这个构造被称为*灵活数组成员*。 http://www.c-faq.com/struct/structhack.html – jamesdlin
@ jamesdlin,不知道!但这似乎是一个可怕的想法。他们怎么能使它成为标准? – Shahbaz
@Shahbaz这不是一个可怕的想法,如果人们错误地使用它,那就很危险。在成为标准之前,将长度为1的数组作为'struct'的最后一个成员用于此目的是一种常见的攻击。 gcc很早就接受了长度为0的数组作为灵活的数组成员。 –