2014-06-17 202 views
0

這是我的結構:如何初始化具有指向struct數組的指針的struct數組?

struct ini_entry { 
    const char *section; 
    const char *name; 
}; 

struct ini_parser { 
    bool (*parser) (void *ctx, const char *file, struct collection_item **vals, int nval); 
    struct ini_entry *entries; 
}; 

這是我的初始化:

static struct ini_parser parsers[] = { 
    {NULL, &(struct ini_entry) {"test", "xxx"}} 
}; 

我需要添加更多的ini_entry在初始化。無論如何,在單個聲明中使用靜態初始化來完成此操作嗎?

對不起,我的英文。

回答

0

首先,struct ini_entry *entries;應該是struct ini_entry const *entries;如果你打算用結構文字初始化它(即使你沒有)。

但是,這種佈局可能會更容易閱讀:

struct ini_entry const foo_entries[] = { 
    { "test", "xxx" }, 
    { "flub", "yyy" }, 
    { "gnas", "zzz" }, 
    { NULL, NULL }  // list terminator presumably required 
}; 

struct ini_parser const parsers[] = { 
    { "foo", foo_entries }, 
    { "bar", bar_entries } 
}; 

注意,有可能使用統計列表,而不是使用結束哨的;列表的長度是編譯時常量(sizeof foo_entries/sizeof foo_entries[0]),您可以將其作爲struct ini_parser的第三個成員。

+0

感謝您的幫助。但是我需要一個沒有專用'ini_entry'的聲明。像這樣的一些東西'{NULL,&(struct ini_entry){{test「,」xxx「},{」test2「,」yyy「}}}'。 – UltimaWeapon

+0

你爲什麼「需要」那個? –

+0

我認爲使用比創建一個新的'ini_entry'專用數組很容易。它還刪除了一個只用於初始化結構體的變量。 – UltimaWeapon