硬汉嵌入式论坛

 找回密码
 立即注册
查看: 549|回复: 4
收起左侧

求助!关于结构体数据拷贝出现不存在的字符

[复制链接]

2

主题

12

回帖

18

积分

新手上路

积分
18
发表于 2023-8-22 15:48:07 | 显示全部楼层 |阅读模式

先贴段代码,这是一段串口发送前的拷贝

先贴段代码,这是一段串口发送前的拷贝


先贴段代码,这是一段串口发送前的拷贝
全局的拷贝对象.png        局部.png
打断点调试watch1中可以看到所拷贝的结构体成员数组除了必要字段外是干净的,结果拷贝下来的结构体数组应该没有元素的地方多出了几个字符这可能是什么情况呢,是否是编译器的优化问题呢,之前遇到很多次这种情况(暂时用memcpy固定长度拷贝可解决),想彻底弄清楚这个问题请教一下老大还有各位坛友
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2023-8-22 16:29:58 | 显示全部楼层
你这个是局部变量,局部变量占用的栈空间,你没有初始化,那么他的默认值就是之前此空间被使用的随机值。而且你做个strcpy仅初始化了前面一部分数值,后面都没有被设置数值。

解决办法,可以考虑使用前memset清零下。
回复

使用道具 举报

2

主题

12

回帖

18

积分

新手上路

积分
18
 楼主| 发表于 2023-8-23 09:17:49 | 显示全部楼层
eric2013 发表于 2023-8-22 16:29
你这个是局部变量,局部变量占用的栈空间,你没有初始化,那么他的默认值就是之前此空间被使用的随机值。而 ...

感谢老大
回复

使用道具 举报

3

主题

336

回帖

345

积分

高级会员

积分
345
发表于 2023-8-23 09:53:58 | 显示全部楼层
在函数声明property_device变量,先初始化如下:
YourType property_device = {0};
不要显式调用memset来清零
回复

使用道具 举报

4

主题

38

回帖

50

积分

初级会员

积分
50
发表于 2023-8-23 11:52:51 | 显示全部楼层
这样拷贝字符串变量,依然存在越界的可能,推荐使用memmove,或者memcpy, strncpy
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-6 02:39 , Processed in 0.234138 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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