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

dailongzhen 2014-05-19 05:24:59
已知一个结构体的指针,结构体内部的成员比较复杂,有int,char,union,struct等各种类型,现欲将其所有成员都打印出来,该如何处理?求编程牛人指点?
...全文
5577 50 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
50 条回复
切换为时间正序
请发表友善的回复…
发表回复
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了。。。
和我赛跑的人 2014-05-22
  • 打赏
  • 举报
回复
引用 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
  • 打赏
  • 举报
回复
任何编程语言都不能自省,只用人和某些高级动物才能自省。
「已注销」 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] 这个真没有,除非你自己写一个可以读取结构体,并且自动生成输出代码的工具。有点类似一个很简单的分析器。
和我赛跑的人 2014-05-21
  • 打赏
  • 举报
回复
知道啥叫数据结构吗 , 兄弟
bfdeh 2014-05-21
  • 打赏
  • 举报
回复
用宏定义吧,稍微能省点事。
加载更多回复(30)
资源下载链接为: https://pan.quark.cn/s/d9ef5828b597 在C语言中,结构体是一种复合数据类型,它能够将不同类型的多个数据组合成一个统一的整体。结构体通常被用于表示较为复杂的数据结构,例如学生信息、员工记录等。指针是C语言中一种特殊的变量,它存储的是其他变量的地址,通过指针可以间接访问和修改被指向的变量。 定义结构体时,需要使用struct关键字,后面紧跟结构体的名称以及其成员。例如,以下代码定义了一个结构体stu,它包含了学生的姓名(字符串指针)、学号(整型)、年龄(整型)、所在小组(字符)和成绩(浮点型): 我们可以创建结构体变量并初始化其成员。例如: 指针可以指向结构体变量。定义结构体指针的方式如下: 然后可以将结构体变量的地址赋值给指针,如下: 需要注意的是,不能直接写pstu = stu1,因为stu1是结构体变量本身,而不是地址。结构体变量名不会像数组名那样在表达式中自动转换为指针,因此必须使用&运算符来获取其地址。 访问结构体成员有两种方式:一是通过解引用操作*和成员访问运算符.,例如(*pointer).memberName;二是使用结构体指针的箭头运算符->,例如pointer->memberName。这两种方式是等价的,但箭头运算符使代码更易读。例如: 结构体数组是结构体的数组形式,可以同时存储多个结构体变量。例如: 结构体数组的指针可以用来遍历整个数组。例如: 以上就是C语言中关于结构体和指针的基本概念及其用法的介绍,包括结构体的定义、初始化、指针的声明、赋值,以及如何通过指针访问结构体成员。熟练掌握这些知识对于编写复杂的C程序非常重要。

70,026

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧