OpenEdv-开源电子网

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

为什么u8 x=0,这种设置不对

[复制链接]

3

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
140
金钱
140
注册时间
2019-7-2
在线时间
42 小时
发表于 2019-11-30 23:56:21 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 a4270 于 2019-12-4 14:18 编辑

x自动被赋值为字符0,十六进制为0x48

x自动被赋值为字符0,十六进制为0x48
x自动被赋值为字符0,十六进制为0x48,不知道为什么-----------------------------------------------------------
2019.12.4

1

1

2

2

1.所以肯定U8赋初值是没有问题的,地址为0x8001BF2,0x00存入R4

3

3

2.同样没有问题,所以在此之前的x的值都是正确的

4

4

3.同样没有问题,所以在此之前的x的值都是正确的

5

5

4.这个时候x的值变了‘9’,因为定义 char Read_CharBuffer[6][4];//字符串数组,
本来只能存4个字符,你却存了5个字符,所有多出来的字符便存在了其他地方,所以字符串便溢出到其他地方,
x的值就变为了字符9.(至于会不会溢出到其他位置我就没深究过了,请大神们继续下一步讨论),所以关于存字符串时千万要小心字符的长度。
5. 修改为char Read_CharBuffer[6][5];后程序就变正常了。

6

6

(吐个槽:我编辑帖子的时候一直自动保存卡得要死,win10系统,没找到取消自动保存的按钮)


字符串溢出.pdf

978.85 KB, 下载次数: 0

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
140
金钱
140
注册时间
2019-7-2
在线时间
42 小时
 楼主| 发表于 2019-11-30 23:56:22 | 显示全部楼层
高福民 发表于 2019-12-4 08:10
直接u8 x=0;肯定是好使的才对;
改成 u8 x;x=0;这种方式可能这次好使,但还是没有找到根本原因,程序还 ...

解决了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2019-12-2 02:02:37 | 显示全部楼层
只留下这个变量,试试看。是不是你局部变量太多了?
回复

使用道具 举报

28

主题

294

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1790
金钱
1790
注册时间
2018-3-26
在线时间
294 小时
发表于 2019-12-2 09:08:20 | 显示全部楼层
我也碰到过,判断里面 x == 'A'判断进不去,得十六进制判断 x == 0x41 才能进去, 搞不懂,,,
茵茵猪头
回复

使用道具 举报

3

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
140
金钱
140
注册时间
2019-7-2
在线时间
42 小时
 楼主| 发表于 2019-12-3 05:53:57 | 显示全部楼层
正点原子 发表于 2019-12-2 02:02
只留下这个变量,试试看。是不是你局部变量太多了?

用的这种方案解决,不知道为什么,
u8 x;
x=0;

以后碰到u8都害怕,直接全部单独赋初值,这种调试害死人
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2019-12-4 02:43:09 | 显示全部楼层
a4270 发表于 2019-12-3 05:53
用的这种方案解决,不知道为什么,
u8 x;
x=0;

直接u8 x=0肯定是可以才对的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

45

帖子

0

精华

高级会员

Rank: 4

积分
624
金钱
624
注册时间
2018-5-24
在线时间
120 小时
发表于 2019-12-4 08:10:59 | 显示全部楼层
直接u8 x=0;肯定是好使的才对;
改成 u8 x;x=0;这种方式可能这次好使,但还是没有找到根本原因,程序还是潜在风险
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6666
金钱
6666
注册时间
2015-8-25
在线时间
1035 小时
发表于 2019-12-4 08:51:09 | 显示全部楼层
就c语言来说:
u8 == unsigned char
u8 x=0;  == unsigned char x = 0;
你的x赋值0突然变成‘0’,绝不是u8引起的,还是需要深究,不要怀疑c语言的语法
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复

使用道具 举报

28

主题

294

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1790
金钱
1790
注册时间
2018-3-26
在线时间
294 小时
发表于 2019-12-4 09:13:15 | 显示全部楼层
正点原子 发表于 2019-12-4 02:43
直接u8 x=0肯定是可以才对的。

调试模式的时候,u8 x = 0;应该是分为两步的,先u8 x; 此时应该x为随机一个数。 再赋值x = 0;

但是x应该也能被赋值0的。
茵茵猪头
回复

使用道具 举报

3

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
140
金钱
140
注册时间
2019-7-2
在线时间
42 小时
 楼主| 发表于 2019-12-4 19:41:57 | 显示全部楼层
szczyb1314 发表于 2019-12-4 08:51
就c语言来说:
u8 == unsigned char
u8 x=0;  == unsigned char x = 0;

解决了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-23 23:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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