美文网首页
c语言 关于0长度数组的使用

c语言 关于0长度数组的使用

作者: eversay | 来源:发表于2021-06-10 00:16 被阅读0次
  • 0长度数组可用于通讯中做不定长数据包结构体的设计
typedef struct
{
    uint8_t head;//固定字符
    uint8_t cmd;//命令
    uint8_t args;//参数
    uint8_t size[2];//data数据大小
    uint8_t data[0];  
    //uint8_t crc[2]; //补在data后两个字节
} pack_t,*ppack_t;

//定义一个数据包的结构体指针
pack_t *pack;

  • 思路
    这是一个简单的通讯包的结构体的设计,head 为固定字符,用于快速判断通讯数据协议是否是满足要求的,cmd 和 args 做协议数据类型识别,size 是这个包中data 数据的长度,data[0] 是一个0长度的数组,实际上在计算这个结构体大小的时候 data 这个字段是没有算进去的,所以这个结构的大小应该是5个字节的大小,0长度数组的使用方式是 将一组有n个字节大小的数组的起始地址指针array,强制转换为上面这个结构体指针,从而得到的((*pack_t)array)->data 这个地址就是通讯数据包中待使用的有效数据data的起始地址。这个有效数据data在内存上是紧跟在size这个字段后面的,使用data[0]只是方便操作。

相关文章

  • c语言 关于0长度数组的使用

    0长度数组可用于通讯中做不定长数据包结构体的设计 思路这是一个简单的通讯包的结构体的设计,head 为固定字符,用...

  • C语言中数组长度的计算详解

    一、 C语言中计算数组长度大小 C语言字符串长度的计算可以使用strlen(str);但是对于数组长度的大小却没有...

  • SDS与C字符串的区别

    根据传统, C 语言使用长度为N+1的字符数组来表示长度为N的字符串, 并且字符数组的最后一个元素总是空字符'\0...

  • redis字符串对象

    C语言中的字符串 在C语言里面使用长度为N+1的字符数组来表示长度为N的字符串,并且字符数组的最后一个元素总是空字...

  • python与c

    1、ctypes 变量类型 2、定义一个可变字符串变量,长度为 10 3、C 语言指针 4、使用 C 语言数组和结...

  • c语言中数组指针

    c语言中没有专门计算数组长度的函数,需使用sizeof(arr)/sizeof(int)计算,其中sizeof(a...

  • 长度为0的数组

    数组的长度在编译时就确定了。长度为0的数组在标准C和C++中是不允许的,编译时会产生错误。但在GNU C中,这种用...

  • C语言9 数组

    C语言9 数组 数组的定义 数组定义的格式: 数组的初始化 方式1:int arr[10] = {0,0,0,0...

  • 使用std::array代替C语言里面的数组。

    C语言数组的不便之处就是求数组的长度麻烦。 对于一个数组int arr[10];,一般都这样求长度sizeof(a...

  • Go学习随笔(三)

    Go语言数组 var 数组名 [数组长度]元素类型{初始化元素} Go语言中数组内部元素默认初始化为0 var 数...

网友评论

      本文标题:c语言 关于0长度数组的使用

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