我们可以执行struct hack(使用int类型),如下所示
struct node{
int i;
struct node *next;
int p[0];
}
int main(){
struct node *n = // is this the correct hack i.e. p[10]?
malloc(sizeof(struct node) + sizeof(int) * 10);
}
还使用大小为1的int类型
struct node{
int i;
struct node *next;
int p[1];
}
int main(){
struct node *n = // is this a correct hack i.e. p[10]?
malloc(sizeof(struct node) + sizeof(int) * 10);
}
答案 0 :(得分:4)
前者是c89中使用的struct hack。这种结构的有效性一直是值得怀疑的。
后者是一个GNU结构hack,它使用GNU扩展并且无效C.
在运行时使用大小可能不同的结构的正确方法是使用c99 灵活数组成员功能。
struct node{
int i;
struct node *next;
int p[];
}
int main(void)
{
struct node *n = malloc(sizeof (struct node) + sizeof (int) * 10);
}
答案 1 :(得分:1)
你使用了两次相同的名字。你必须选择另一个。 除了不使用正确的语法之外,这是正确的。
应该{{1}}不是[]
或[1]
,这样代码不是“hack”,但从c99开始是合法的,也称为灵活的数组成员。
[0]