typedef struct { size_t cbSize; char data[0]; }UnkownSizeStruct;
變長結構如上定義,網絡
在msvc編譯器中可以使用ide
#pragma pack(1)資源
來定義字節對齊方式,不然在編譯器定義結構體時會保留不少空白區域,網絡傳輸時當時不須要傳輸這些東西,至關浪費帶寬資源。編譯器
不定長結構體惟一的做用就是指明一個cbSize,說到底,其實這個定長結構結構體其實就是定義一個獲取結構長度方法,不定義它也徹底能夠。it
好比:編譯
void * pData = ................; size_t dataSize = *(size_t*)pData; //若是用變長結構體則是 UnkownSizeStruct * pStruct = (UnkownSizeStruct*)pData; size_t dataSize = pStruct->cbSize;