我想要一個二進制文件的記錄大小的身材更小。 sizeof運算(union_data)如何可以比聯盟中的兩個數據結構更小?聯盟尺寸比總成員
例如
struct hdr
{
unsigned short hdr;
char hdr_name [90];
char hdr_add1 [90];
char hdr_add2 [90];
};
struct data_info
{
unsigned short no;
char name [90];
char addr1 [90];
char addr2 [90];
char amount [120];
char verb [25];
};
union
{
struct box_info_data box_buff;
struct hdr dhdr;
struct data_info dinfo;
} dhdr_rec, ddata_rec;
有沒有'union_data'在你的代碼。我假設你的意思是'sizeof(dhdr_rec)'?你也知道'union'是如何工作的嗎?它的大小至少等於其最大成員的大小,並且它的所有成員共享的空間,使得只有*其中之一*可以是「有效」的時間。對比與一個'struct',其大小至少等於它的構成部件的大小的總和的該行爲。 –
這將是最大成員的大小,再加上可能一些填充取決於編譯器和編譯選項。你期望它是成員大小的總和嗎?如果是這樣,我認爲你不瞭解工會如何工作。 –
在這一點上,你沒有顯示任何錯誤。是什麼讓你認爲*「sizeof(union_data)小於union內的兩個數據結構」*?給我們一些工作在這裏! – dmckee