起因
最近在看一个开源库的代码,看到有个关于char data[0]
的用法挺妙的,分享给大家。
正文
假设,我们需要定义一个TDU
用来描述网络数据传输单元,该结构体有四个成员变量:conv
,cmd
,sn
以及data
。data
用来存放TDU
的数据内容。常规的写法MyTDU
应该是下面这个样子:
struct MyTDU {
uint8_t conv;
uint8_t cmd;
uint16_t sn;
char *data;
};
然后,构造一个conv=1
,cmd=2
,sn=3
,data
的长度为 16 字节内容全为 6 的MyTDU
实例,应该是下面这样的写法,两次malloc
,两次free
。
MyTDU *mt = (MyTDU *) malloc(sizeof(MyTDU));
mt->data = (char *) malloc(size);
mt->conv = 1;
mt->cmd = 2;
mt->