typedef struct
{
size_t cbSize;
char data[0];
}UnkownSizeStruct;
变长结构如上定义,
在msvc编译器中可使用
#pragma pack(1)
来定义字节对齐方式,否则在编译器定义结构体时会保留很多空白区域,网络传输时当时不需要传输这些东西,相当浪费带宽资源。
不定长结构体唯一的作用就是指明一个cbSize,说到底,其实这个定长结构结构体其实就是定义一个获取结构长度方法,不定义它也完全可以。
比如:
void * pData = ................;
size_t dataSize = *(size_t*)pData;
//如果用变长结构体则是
UnkownSizeStruct * pStruct = (UnkownSizeStruct*)pData;
size_t dataSize = pStruct->cbSize;
转载于:https://blog.51cto.com/bhlzlx/1198936