为了账号安全,请及时绑定邮箱和手机立即绑定

在线等!怎么定位结构体某个变量的地址?求老司机指点!

在线等!怎么定位结构体某个变量的地址?求老司机指点!

POPMUISE 2019-10-08 12:40:36
structAA{unsignedcharday;unsignedcharmonth;unsignedcharyear;}a;unsignedcharb[]={1,2,3,4};我想把b[2]开始两位复制到month开始两位,使用memcpy(&a+1,b+1,2);结果是错误的。我怀疑是&a+1的偏移量为一个结构体大小3,而非1.那么要怎么定位month的地址呢?
查看完整描述

2 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

我想把b[2]开始两位复制到month开始两位,使用memcpy(&a+1,b+1,2);结果是错误的。
两位?两个bit?memcpy是没有办法复制位的。所以这个操作的目的是啥?
我怀疑是&a+1的偏移量为一个结构体大小3,而非1.
不要怀疑了,这应该是C语言的常识,讲到指针的时候必然会介绍。
指针p做加减的时候,单位是sizeof(*p)。p+1会便宜sizeof(*p)。
那么要怎么定位month的地址呢?
&a.month
                            
查看完整回答
反对 回复 2019-10-08
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

&a类型是AA*,&a+1会向后移动一个结构体的大小,很可能会覆盖其他的内存!!!如果一定要这样赋值的话,将&a转为char*类型就行了,memcpy((char*)(&a)+1,b+1,2)。
强烈建议不要这样做!!!
                            
查看完整回答
反对 回复 2019-10-08
  • 2 回答
  • 0 关注
  • 239 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信