You need to enable JavaScript to run this app. C语言如何传递结构体数组的apbuf字段到函数,实现单次打包TCP发送
优惠活动
大模型
产品
解决方案
定价
更多

C语言如何传递结构体数组的apbuf字段到函数,实现单次打包TCP发送

解决方案

你可以直接传递aplist数组的首指针给发送函数,不需要传递完整的Interface结构体,也不会携带无关字段,同时能遍历所有元素的apbuf完成打包后再一次性发送。

1. 修改发送函数定义

将入参改为parmList类型的数组指针和元素个数,编译器会自动处理结构体的内存偏移,不需要你手动计算指针:

void b_sMessage(uint8_t type, const parmList *pAplist, uint8_t listCount)
{
    for(int index = 0; index < listCount; index++)
    {
        // 依次将每个aplist元素的内容加入发送缓冲区
        b_addApMessage(pAplist[index].lenbuf, pAplist[index].apbuf);
    }
    // 所有内容打包完成后再执行一次发送
    b_send();
}

2. 调用方式

直接传入aComm中aplist数组的首地址即可,只会传递内存地址,没有额外的结构体拷贝开销:

b_sMessage(type, aComm.aplist, MLIST);

原思路的问题说明

你之前设想的只传递单个lenbuf和buffer指针的方式无法实现遍历需求:这两个参数仅能代表第一个aplist元素的信息,没有结构体的步长信息,无法正确偏移到下一个aplist元素的内存位置。如果强行通过手动计算偏移实现,会严重依赖结构体的内存布局,可维护性极低,不推荐使用。


内容的提问来源于stack exchange,提问作者MrmDdda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 20:27:03