家人们,定义的全局数组变量会被自动初始化吗?

[复制链接]
1557|5
 楼主| morbid 发表于 2022-3-17 22:36 | 显示全部楼层 |阅读模式
请教大家,今天遇到一个很奇怪的bug,颠覆了我的认知,现象是这样:我用单片机连接蓝牙,发送一个字符数组到蓝牙串口助手,这个字符数组的初始化形式为char  str[20] = {"hello"} 或 char str[20]={'h'};我就去发送这个数组里面的内容,长度为sizeof(str)。结果是:上位机得到我发送的数据的同时也把字符数组剩余空间的内容一起发上来,而且是乱码,

这里就有两个问题:
1,全局位置的字符数组如果不去初始化,会被自动初始化吗?
     如果初始化了,剩余没有值的空间内容又是什么?
2,如果我定义长度为100的全局字符数组,尾巴上长度为50的空间如果不使用会被系统占用或者分配导致乱码吗?

我一直认为:1,全局变量如果没初始化,也会自动初始化为0,即使只初始化一部分空间,剩余的部分也会初始化为0    2,针对上面的第二个问题,如果后面长度为50的空间未被使用,也一定不会被系统占用或者分配,因为这部分空间是划分给这个数组的,也就只有这个数组才能使用这个空间

论坛的家人们,又是向你们请教的一天
li880wert 发表于 2022-3-18 08:11 | 显示全部楼层
C  基础没过吧,SIZEOF 就是20,你定义的20大小
sonicll 发表于 2022-3-18 16:53 | 显示全部楼层
你想用的是strlen()吧
icecut 发表于 2022-3-18 20:33 | 显示全部楼层
默认也不应该是乱码.但是建议初始化成0
 楼主| morbid 发表于 2022-3-22 10:49 | 显示全部楼层
icecut 发表于 2022-3-18 20:33
默认也不应该是乱码.但是建议初始化成0

对,默认确实不应该是乱码,我用串口连线测试都没问题,但是发到蓝牙再转发出去就是乱码,而且乱码的数量和发送数组的未初始化空间一样多,可能是这个蓝牙太便宜的原因,现在已经解决了,谢谢
sparrow054 发表于 2022-4-1 15:11 | 显示全部楼层
icecut 发表于 2022-3-18 20:33
默认也不应该是乱码.但是建议初始化成0

正解
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

37

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部