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所指向的內存分配內存。