关于使用int类型的struct hack

时间:2014-02-05 23:29:22

标签: c struct

我们可以执行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);
}

2 个答案:

答案 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]