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;