OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2879|回复: 3

关于数组强制转化为结构体指针问题

[复制链接]

27

主题

118

帖子

0

精华

高级会员

Rank: 4

积分
850
金钱
850
注册时间
2015-12-8
在线时间
176 小时
发表于 2020-3-31 15:57:23 | 显示全部楼层 |阅读模式
代码如下:
  1. typedef struct
  2. {
  3.         int8_t        rssi;
  4.         uint8_t        mac[6];
  5. }WifiAP_Str;
  6. typedef struct
  7. {
  8.         uint8_t                ApNumbet;                        //扫描到的热点数量
  9.         WifiAP_Str        AP[WIFI_AP_MAX];        //热点参数
  10.         uint32_t        Timestamp;                        //时间戳
  11. }Loction_Wifi_Info_Str;

  12. Loction_Wifi_Info_Str        Wifi_Info = {0};

  13. Loction_Wifi_Info_Str        Mywifi_Info = {0};
  14. uint8_t data[64] = 0;

  15. data[0] = 1;
  16. memcpy(&data[1],&Wifi_Info,sizeof(Wifi_Info));

  17. 方法1:可以实现Mywifi_Info的赋值
  18. uint32_t temp = (Loction_Wifi_Info_Str *)&data[1];
  19. memcpy(&Mywifi_Info ,temp ,sizeof(Mywifi_Info));
  20. 方法2:可以实现Mywifi_Info 赋值
  21. memcpy(&Mywifi_Info ,&data[1] ,sizeof(Mywifi_Info));
  22. 方法3:会进入硬件错误
  23. memcpy(&Mywifi_Info ,(Loction_Wifi_Info_Str *)&data[1] ,sizeof(Mywifi_Info));
复制代码
请问一下这3种写法中,为什么第3中会进入硬件错误?我觉得应该是和结构体字节对齐有关,但是不知道具体是什么原因,请大神解答一下!!!
为自己掌握新的知识感到快乐
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

317

帖子

0

精华

高级会员

Rank: 4

积分
859
金钱
859
注册时间
2015-2-12
在线时间
353 小时
发表于 2020-3-31 17:18:21 | 显示全部楼层

回帖奖励 +5 金钱

建议加入  #pragma pack(1)  #pragma pack() ;  _attribute__((packed)) Loction_Wifi_Info_Str
回复 支持 反对

使用道具 举报

6

主题

211

帖子

0

精华

高级会员

Rank: 4

积分
833
金钱
833
注册时间
2019-12-17
在线时间
157 小时
发表于 2020-3-31 19:07:57 | 显示全部楼层
你把uint8_t data[64] = 0;改成uint8_t data[2*sizeof(Mywifi_Info)] = 0;试试
回复 支持 反对

使用道具 举报

80

主题

931

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3348
金钱
3348
注册时间
2013-5-28
在线时间
468 小时
发表于 2020-4-1 09:23:05 | 显示全部楼层
memcpy(&Mywifi_Info ,(Loction_Wifi_Info_Str *)&data[1] ,sizeof(Mywifi_Info));

没用过memcpy,但是一般不外乎就是两个指针,然后Mywifi_Info++,然后data[*]++,之类,你后面sizeof代表的是BYTE的数量,而你前面的地址传到进入的是(Loction_Wifi_Info_Str *),不进入硬件错误才怪呢,内存过界
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 06:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表