C语言如何遍历结构体成员

dailongzhen 2014-05-19 05:24:59
已知一个结构体的指针,结构体内部的成员比较复杂,有int,char,union,struct等各种类型,现欲将其所有成员都打印出来,该如何处理?求编程牛人指点?
...全文
4654 50 打赏 收藏 举报
写回复
50 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
bacley 2016-05-21
打个断点。。。运行起来跟踪。。把这结构体的指针加到addwatch里。。直接就可以看内容。。全部字段都能看。。不用打印出来看的啦。。。这个方便哇。。
  • 打赏
  • 举报
回复
bacley 2016-05-21
用RAD C++Builder 的话。。我有很简单的方法让你看到你这结构体的全部各个字段内容。。。^m^
  • 打赏
  • 举报
回复
VS 2014-12-05
我也需要这么一个函数 在不知道(假装不知道)结构体内部成员数量和类型的情况下能够读取,要不然那么多结构体和成员,一个个输出累呀 怎么办……
  • 打赏
  • 举报
回复
assassin5616 2014-05-30
引用 30 楼 assassin5616 的回复:
[quote=引用 12 楼 dailongzhen 的回复:] [quote=引用 11 楼 liuhengxiao 的回复:] 引用别人的结构体那也应该能查看到结构体的成员吧。。。
手动敲代码是能看到,但是传过来的结构体比较庞大,包含的成员类型丰富多样,结构体嵌套很多,总数据有的达到100多个甚至更多,如果全都手动敲一遍,甚是麻烦,而且效率也不高,因此想要寻找一种快捷有效的算法,不知有没有?[/quote] 这个真没有,除非你自己写一个可以读取结构体,并且自动生成输出代码的工具。有点类似一个很简单的分析器。[/quote]
引用 31 楼 dailongzhen 的回复:
[quote=引用 30 楼 assassin5616 的回复:] [quote=引用 12 楼 dailongzhen 的回复:] [quote=引用 11 楼 liuhengxiao 的回复:] 引用别人的结构体那也应该能查看到结构体的成员吧。。。
手动敲代码是能看到,但是传过来的结构体比较庞大,包含的成员类型丰富多样,结构体嵌套很多,总数据有的达到100多个甚至更多,如果全都手动敲一遍,甚是麻烦,而且效率也不高,因此想要寻找一种快捷有效的算法,不知有没有?[/quote] 这个真没有,除非你自己写一个可以读取结构体,并且自动生成输出代码的工具。有点类似一个很简单的分析器。[/quote] 就是不懂该如何分析?求教[/quote] 要不就直接写代码读源文件,然后分析结构体,生成一个输出函数。想通用一点就用flex/Bison。这两样东西学习曲线挺陡的,需要花点时间
  • 打赏
  • 举报
回复
赵4老师 2014-05-26
引用 36 楼 zhao4zhong1 的回复:
任何编程语言都不能自省,只用人和某些高级动物才能自省。
任何编程语言都不能自省,只人和某些高级动物才能自省。
  • 打赏
  • 举报
回复
一根烂笔头 2014-05-26
它只是个工具,没有自主能力,还要有人来代劳!
  • 打赏
  • 举报
回复
没有办法,除非编译器有相应的扩展。C#之类的话倒是可以用反射。
  • 打赏
  • 举报
回复
Starmean 2014-05-24
c++是不能动态创建新类的,只能创建类的实例 类声明的本质就是一定长度的内存进行合理规划,这个是在编译期完成的,而不是在运行态 如果要在运行时动态创建类,那么所有的工作就得自己做 也就是你自己必须创建一个类的声明进行传递,如D3D编程中就有类似的操作,在将顶点数据传给显卡的时候,就有一个声明,声明就是保存这个数据流中偏移量和类型等信息。
  • 打赏
  • 举报
回复
纹枰老妖 2014-05-24
引用 41 楼 akirya 的回复:
没有办法,除非编译器有相应的扩展。C#之类的话倒是可以用反射。
http://bbs.csdn.net/topics/390795780 请您打开这个链接,里面有一个问题待解,谢谢!
  • 打赏
  • 举报
回复
纹枰老妖 2014-05-24
引用 42 楼 wenpinglaoyao 的回复:
[quote=引用 19 楼 ForestDB 的回复:] C不是动态语言,没有元信息(字段名、字段类型),不能反射,所以只能一行行写代码。
http://http://bbs.csdn.net/topics/390795780请大神打开这个链接,这个帖子我发了两次!无人能够回答,所以在您身上碰碰运气,叨扰了。[/quote] http://bbs.csdn.net/topics/390795780
  • 打赏
  • 举报
回复
纹枰老妖 2014-05-24
引用 19 楼 ForestDB 的回复:
C不是动态语言,没有元信息(字段名、字段类型),不能反射,所以只能一行行写代码。
http://http://bbs.csdn.net/topics/390795780请大神打开这个链接,这个帖子我发了两次!无人能够回答,所以在您身上碰碰运气,叨扰了。
  • 打赏
  • 举报
回复
dailongzhen 2014-05-23
引用 38 楼 pubuzhixia 的回复:
[quote=引用 4 楼 PDD123 的回复:] 事先不知道内部有哪些成员,怎么可能正确打印?
支持。 事先不知道有哪些成员,也就意味着都不知道如何去解释这一段内存,本来就无法打印。 比如这段内存放的是0xFFFFFFFF,如果只有一个int32成员,那结果就是-2147483648;如果为2个int16成员,那结果就是-32768,-32768了。。。[/quote] 我大概了解大家的意思了
  • 打赏
  • 举报
回复
pubuzhixia 2014-05-23
引用 4 楼 PDD123 的回复:
事先不知道内部有哪些成员,怎么可能正确打印?
支持。 事先不知道有哪些成员,也就意味着都不知道如何去解释这一段内存,本来就无法打印。 比如这段内存放的是0xFFFFFFFF,如果只有一个int32成员,那结果就是-2147483648;如果为2个int16成员,那结果就是-32768,-32768了。。。
  • 打赏
  • 举报
回复
引用 34 楼 dailongzhen 的回复:
[quote=引用 33 楼 u012222342 的回复:] [quote=引用 32 楼 dailongzhen 的回复:] [quote=引用 29 楼 u012222342 的回复:] 知道啥叫数据结构吗 , 兄弟
懂一点[/quote] 不知道结构怎么打印,智能分析吗 ,不知道类型你怎么分析结构里有多少项呢 struct A{int a; int b; char c[20];} 占28个字节 ,如果存全int 能存7个 ,short 14个,不一样的类型,不一样的个数,类型混合更麻烦,[/quote] 那个结构体就是很多不同类型的混合,结构体嵌套。。。[/quote] 不可能的 ,
  • 打赏
  • 举报
回复
赵4老师 2014-05-22
任何编程语言都不能自省,只用人和某些高级动物才能自省。
  • 打赏
  • 举报
回复
li4c 2014-05-22
我认为这是不可能的,因为你不知道保存的是什么数据,都是01010101,你不知道数据类型,怎么知道是什么数据呢
  • 打赏
  • 举报
回复
dailongzhen 2014-05-22
引用 33 楼 u012222342 的回复:
[quote=引用 32 楼 dailongzhen 的回复:] [quote=引用 29 楼 u012222342 的回复:] 知道啥叫数据结构吗 , 兄弟
懂一点[/quote] 不知道结构怎么打印,智能分析吗 ,不知道类型你怎么分析结构里有多少项呢 struct A{int a; int b; char c[20];} 占28个字节 ,如果存全int 能存7个 ,short 14个,不一样的类型,不一样的个数,类型混合更麻烦,[/quote] 那个结构体就是很多不同类型的混合,结构体嵌套。。。
  • 打赏
  • 举报
回复
assassin5616 2014-05-21
引用 12 楼 dailongzhen 的回复:
[quote=引用 11 楼 liuhengxiao 的回复:] 引用别人的结构体那也应该能查看到结构体的成员吧。。。
手动敲代码是能看到,但是传过来的结构体比较庞大,包含的成员类型丰富多样,结构体嵌套很多,总数据有的达到100多个甚至更多,如果全都手动敲一遍,甚是麻烦,而且效率也不高,因此想要寻找一种快捷有效的算法,不知有没有?[/quote] 这个真没有,除非你自己写一个可以读取结构体,并且自动生成输出代码的工具。有点类似一个很简单的分析器。
  • 打赏
  • 举报
回复
知道啥叫数据结构吗 , 兄弟
  • 打赏
  • 举报
回复
bfdeh 2014-05-21
用宏定义吧,稍微能省点事。
  • 打赏
  • 举报
回复
加载更多回复(30)
发帖
C语言

6.6w+

社区成员

C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
帖子事件
创建了帖子
2014-05-19 05:24
社区公告
暂无公告