如何定义不定长结构体,及分配空间
我想要这样一个结构体,其中有的成员可能数目有多个(个数会变化)。如何定义这样一个结构体及如何使用中动态分配内存呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我想要这样一个结构体,其中有的成员可能数目有多个(个数会变化)。如何定义这样一个结构体及如何使用中动态分配内存呢?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(12)
@gvim ,你说的char p[0],c的iso标准不支持是对的。如果使用 char p[]会存在问题,它需要放在结构体的下部。当我需要在结构体下面扩充成员时,会产生问题。曾经用过p[]的写法。最终还是决定使用char p[0];
我刚才翻了一下我以前的intel c编译器,还没测试过,奶奶的过期了。。对我来说,支持这两个编译器就足够了。哈。
不过我要看我的基础库做完后的情况,如果这个基础结构体下部,可以不增加其他成员,我会采用p[],毕竟如你说的,这样适用面更宽。哈。
这个技巧我觉得可以称作结构体的单一继承
@gvim ,你说的char p[0],c的iso标准不支持是对的。如果使用 char p[]会存在问题,它需要放在结构体的下部。当我需要在结构体下面扩充成员时,会产生问题。曾经用过p[]的写法。最终还是决定使用char p[0];
我刚才翻了一下我以前的intel c编译器,还没测试过,奶奶的过期了。。对我来说,支持这两个编译器就足够了。哈。
不过我要看我的基础库做完后的情况,如果这个基础结构体下部,可以不增加其他成员,我会采用p[],毕竟如你说的,这样适用面更宽。哈。
@gvim ,你说的char p[0],c的iso标准不支持是对的。如果使用 char p[]会存在问题,它需要放在结构体的下部。当我需要在结构体下面扩充成员时,会产生问题。曾经用过p[]的写法。最终还是决定使用char p[0];
我刚才翻了一下我以前的intel c编译器,还没测试过,奶奶的过期了。。对我来说,支持这两个编译器就足够了。哈。
不过我要看我的基础库做完后的情况,如果这个基础结构体下部,可以不增加其他成员,我会采用p[],毕竟如你说的,这样适用面更宽。哈。
谢谢~
@Mallon 指针 和 char[] 的差别一是需要多一个域来放指针,二是char[]只是符号,因此分配出来的内存和头部是连续的,而指针的分配是一个和头部不连续地址的。第二种情况在计算校验的时候很方便,不管头部怎么设计怎么变,只要把这段地址做为连续内存遍历即可,或者做数据包的时候。
99标准用 char p[]吧,0长度数组标准不支持,只是gcc的扩展,有些编译器不支持这个扩展。gcc用-pedantic会有警告的。
回复
你说的这个情况我重新看了标准,确实如此。不过暂时不动。哈。
谢谢~^_^
贴段代码给你,这个是我自己写的基本库里的代码,看你是否能理解,你注意,p[0] ,和hp的用法,在_setP的宏里有定义,实际申请到的空间,返回的位置会空出一段,给另外个结构体。通过_Pheader的宏,可以访问到。这里先补充几个类型的定义
@中山野鬼 求教~
基本思路: