2

所以我有以下两种结构在结构体中初始化一个结构体?

typedef struct clienttable { 
    vartable head; 
    vartable tail; 
} clienttable; 

typedef struct vartable { 
    int tableid; 
    int randominfo; 
    struct vartable *next; 
} vartable; 

,我想他们initizalite这样。

clienttable *maintable; 
maintable = (clienttable *) malloc (sizeof(clienttable)); 
maintable->head = {.tableid = 10, .randominfo=NULL, .next=NULL}; 

,但是当我去编译我不断收到一个

expected expression before { token 

错误。我也试过{10,NULL}也无济于事。

我在做什么错?

另外,我需要malloc这两个clientable和客户端表内的所有表,或将只是malloc ing一个工作?

+1

使用C99,C11或更旧的东西? – chux

+0

我觉得99,但如果有必要,我可以切换到其他东西。 – dcousina

回答

6

我在做什么错?

maintable->head = ... 

不是初始化,但分配。

... = {.tableid = 10, .randominfo=NULL, .next=NULL}; 

但只能用于初始化。

因此,使用的化合物改变字面后者此

... = (vartable) {.tableid = 10, .randominfo=0, .next=NULL}; 

的分配。


...将我需要的malloc在客户端表中的clientable和所有的表,或将只mallocing的一个工作?

不能确定你是指通过“所有表”,而是由分配clienttable -typed变量你分配的内存为它的成员headtail。你做不是headtail的成员next所指向的内存分配内存。