打印

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

[复制链接]
1108|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

使用特权

评论回复
5
morbid|  楼主 | 2022-3-22 10:49 | 只看该作者
icecut 发表于 2022-3-18 20:33
默认也不应该是乱码.但是建议初始化成0

对,默认确实不应该是乱码,我用串口连线测试都没问题,但是发到蓝牙再转发出去就是乱码,而且乱码的数量和发送数组的未初始化空间一样多,可能是这个蓝牙太便宜的原因,现在已经解决了,谢谢

使用特权

评论回复
6
sparrow054| | 2022-4-1 15:11 | 只看该作者
icecut 发表于 2022-3-18 20:33
默认也不应该是乱码.但是建议初始化成0

正解

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

37

帖子

0

粉丝