描述
C99标准提供在结构体最后一个元素定义一个未知大小的数组,它就叫做柔性数组成员。
柔性数组的特点
- 定义柔性数组必须在结构体内的最后一个元素。
- 使用sizeof()获取结构体大小不包含柔性数组的内存(方便用于结构体的网络传输)。
- 包含柔性数组的结构体需要使用mallo函数进行内存动态分配,并且分配的内存应该大于结构体的大小。
使用柔性数组
定义方式一
//设置内存对齐方式
#pragma pack(1)
struct MessageHead{
unsigned char magicNumber;
unsigned char version;
unsigned char serialize;
unsigned char command;
unsigned short length;
//柔性数组,某些编译器支持这种写法
char data[0];
};
#pragma pack()
定义方式二
//设置内存对齐方式
#pragma pack(1)
struct MessageHead{
unsigned char magicNumber;
unsigned char version;
unsigned char serialize;
unsigned char command;
unsigned short length;
//柔性数组
char data[];
};
#pragma pack()
初始化柔性数组
string str="hello world";
int messageLen=str.length();
//开辟结构体和柔性数组空间
MessageHead *messageHead=(MessageHead*)malloc(sizeof(MessageHead)+messageLen);
memset(messageHead,0,sizeof(MessageHead));
messageHead->magicNumber=9;
messageHead->version=12;
messageHead->serialize=10;
messageHead->command=5;
messageHead->length=htons(messageLen);
memcpy(messageHead->data,str.data(),messageLen);
//销毁开辟的空间
free(messageHead);
网友评论