2012-06-08 42 views
1

我有下面的代碼。我得到了「警告:在構建初始化程序時缺少大括號[-Wmissing-braces]」警告。結構中的字符初始化

struct routing { 
    int hop_distance; 
    char timeinfo[13]; 
    char sender_ID[16]; 
    char gateway[16]; 
}; 

struct routing user_list[40] = { [0]={0,0,0,0}}; 

我想我得到警告,因爲字符初始化,我應該如何初始化它?

struct routing user_list[40] = { [0]={0,{0},{0},{0}}}; 

struct routing user_list[40] = { [0]={0,'\0','\0','\0'}}; 

或一些其他的方式?

+0

memset的(&USER_LIST,0,40 *的sizeof(路由)); – JMC

+0

注意,使用'struct routing user_list [40] = {{0}};'可以達到同樣的效果。沒有顯式初始化的任何字段和數組元素都將被初始化爲靜態對象,並將其設置爲適當的0值。 –

回答

2

您正在初始化數組的元素0。因此:

struct routing user_list[40] = { [0]={...} }; 

到目前爲止您的判斷正確。在這個元素中,你正在初始化四個成員:

struct routing user_list[40] = { [0]={..., ..., ..., ...} }; 

也不錯。

元件1是一個int,這樣就可以與多個初始化它,如0。

元件2,3和4是char陣列,這樣就可以對它們進行初始化初始化的陣列相同的方式char{0}{'\0'}""他們所有的工作:

struct routing user_list[40] = { [0]={0, {0}, {'\0'}, ""} }; 

注意上面是顯示可以使用三種方法的例子。實際上,你採取一種方法並在所有三種方法中使用它。

你得到警告的原因是因爲你試圖用0而不是{0}初始化陣列。

0

你必須圍繞陣列,大括號:

struct routing user_list[40] = { 
    [0] = { 0, { 0 }, { 0 }, { 0 } } 
};