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
相关产品推荐
相关产品推荐

