char data[0]在struct末尾有何作用

本文探讨了在定义结构体时,在末尾添加`char data[0]`的用意。通过这种方式,可以巧妙地利用内存分配,达到与手动分配相同的效果,同时提高性能和代码简洁性。文章还介绍了如何在不支持`char data[0]`的编译器下进行替代,并讨论了结构体字节对齐和大小端相关知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

起因

最近在看一个开源库的代码,看到有个关于char data[0]的用法挺妙的,分享给大家。

正文

假设,我们需要定义一个TDU用来描述网络数据传输单元,该结构体有四个成员变量:convcmdsn以及datadata 用来存放TDU的数据内容。常规的写法MyTDU应该是下面这个样子:

struct MyTDU {
   
    uint8_t conv;
    uint8_t cmd;
    uint16_t sn;
    char *data;
};

然后,构造一个conv=1cmd=2sn=3data的长度为 16 字节内容全为 6 的MyTDU实例,应该是下面这样的写法,两次malloc,两次free

MyTDU *mt = (MyTDU *) malloc(sizeof(MyTDU));
mt->data = (char *) malloc(size);
mt->conv = 1;
mt->cmd = 2;
mt->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值