美文网首页
C++中的柔性数组

C++中的柔性数组

作者: 何亮hook_8285 | 来源:发表于2022-10-16 20:50 被阅读0次

描述

C99标准提供在结构体最后一个元素定义一个未知大小的数组,它就叫做柔性数组成员。

柔性数组的特点

  1. 定义柔性数组必须在结构体内的最后一个元素。
  2. 使用sizeof()获取结构体大小不包含柔性数组的内存(方便用于结构体的网络传输)。
  3. 包含柔性数组的结构体需要使用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);

相关文章

网友评论

      本文标题:C++中的柔性数组

      本文链接:https://www.haomeiwen.com/subject/fbzlzrtx.html