比方說,我有一個結構類型:初始化與其他結構的內容之一結構
typedef struct
{
int a;
int b[3];
int c;
} __attribute__((packed)) foo_t;
我初始化正是如此:
foo_t first = { 1, { 2, 3, 4 }, 5 };
現在我想創建第二個結構,是一個集第一個:
typedef struct
{
int b[3];
int c;
} __attribute__((packed)) bar_t;
bar_t second = { first.b[3], first.c }; //this should define first.c as 5
memcpy(second.b, first.b, 3 * sizeof(int));
如果我打印每個變量的值在second
,th Ë陣列b
正確定義,但c
只是0
printf("%d %d %d %d\n", second.b[0], second.b[1], second.b[2], second.c);
輸出
2 3 4 0
爲什麼不second.c
得到正確填充?
..這仍然留下'first.b [3]'是什麼值作爲'b'只有三個元素,你複製第四個元素。請注意,初始化程序是一個值,而不是定義。 –
呵呵,好點。我明白你在說什麼。在這種情況下,我可以用「first.b [3]」來代替,直到我在下一行上執行memcpy爲止,作爲「佔位符」。請注意,在我正在處理的實際代碼中,數組很大,因此顯式鍵入'{first.b [0],first.b [1],first.b [2],first.b [3], first.b [4] .... etc}'是站不住腳的。 –
我相信在一個初始化器中,所有沒有具體提到的元素都被設置爲零,所以'{{0},first.c}'應該做到這一點。請測試它。 –