当前位置: 首页 > news >正文

换个花样玩C++(2)柔性数组怎么玩

  如果你涉足网络传输方向的开发,我想你对这段类似的代码应该不会很陌生,先看代码:

int check_msg(svr_proto_t* pkg, uint32_t bodylen, fdsession_t* fdsess)
{struct report_msg {uint32_t			gameid;uint32_t			userid;uint32_t			recvid;uint32_t			onlineid;uint32_t			maptype;uint32_t			mapid;uint32_t			timestamp;uint32_t			msglen;char				msg[];	}__attribute__((packed));if (bodylen <= sizeof(report_msg)) {KERROR_LOG(pkg->id, "invalid len\t[%u]", bodylen);return 0;}report_msg* pmsg = (report_msg *)pkg->body;if (pmsg->msglen + sizeof(report_msg) != bodylen) {KERROR_LOG(pkg->id, "invalid len\t[%u %u]", bodylen, pmsg->msglen);return 0;} //TODO other logicreturn 0;
}

这里你会看到有report_msg 这个结构体,他的msg成员是一个数组,数组长度是0,当然你也可以写成 char msg[0];到这里就引出数组的另外一种玩法---柔性数组。

柔性数组

 在c99中有明确的规定允许结构体中最后一个数组大小是未知的。

柔性数组其实是结构体中的最后一个数组未说明大小,且结构体中至少包含一个以上其

http://www.lryc.cn/news/62750.html

相关文章:

  • 【前端】一个好看的前端页面
  • flink on k8s提交任务
  • 如何判定自己适合自学编程还是报班?
  • 本地缓存解决方案Caffeine | Spring Cloud 38
  • Docker常用命令笔记
  • Nachos系统的上下文切换
  • streamx平台部署
  • css中的background属性
  • 代码评审平台Gerrit安装配置方法介绍
  • 一篇文章解决Mysql8
  • 【Python】【进阶篇】6、Django视图函数
  • Latex常用符号和功能记录
  • MySQL高级篇——索引的创建与设计原则
  • 王一茗: “大数据能力提升项目”与我的成长之路 | 提升之路系列(三)
  • MySQL:数据库的基本操作
  • 银行系统【GUI/Swing+MySQL】(Java课设)
  • 【社区图书馆】-《科技服务与价值链》总结
  • 工具链和其他-异步模块加载
  • 第一次使用R语言
  • 《语文教学通讯》栏目 收稿范围
  • Towards Principled Disentanglement for Domain Generalization
  • 计算机网络学习02
  • 网络交换机端口管理工具
  • redis五大命令kv设计建议内存淘汰
  • 如何真正认识 Linux 系统结构?这篇文章告诉你
  • 【移动端网页布局】流式布局案例 ① ( 视口标签设置 | CSS 样式文件设置 | 布局宽度设置 | 设置最大宽度 | 设置最小宽度 )
  • 力扣---LeetCode88. 合并两个有序数组
  • H7-TOOL的CANFD Trace全解析功能制作完成,历时一个月(2023-04-28)
  • 探析Android中的四类性能优化
  • ubuntu18.04 安装编译zlmediakit