关于sprintf函数影响串口捕获的神奇bug

在准备蓝桥杯国赛时,作者发现一个以前从未出现过的串口捕获数据错误。经过深入排查,确定问题源自sprintf函数导致的字符串溢出,即使没有报错或影响显示,但影响了输入捕获功能。增大存储字符串的缓冲区大小后,问题得到解决,提示开发者应为字符数组预留更多余量以避免类似bug。
摘要由CSDN通过智能技术生成

        在第十四届蓝桥杯嵌入式比赛中,有关于输入捕获的内容。bug的发生是以前从来没出过问题的串口捕获代码突然数据出现问题,调试中发现每次捕获的值存在较大错误。本以为是捕获代码的问题,结果到最后也没找到问题。所幸其他功能得以实现,仍然是省一,还有国赛的资格。

        然后最近开始备考国赛,顺便找找这个bug。

        经过各种排查,最后确认bug出在sprintf这个打印函数,确实令人惊奇。sprintf打印会影响到输入捕获,且其他功能一切正常。

        然后对sprintf涉及到的参数进行排查,最后将其用于储存的字符串temp原本的空间20扩大到25后,神奇的是问题解决了,bug的最终原因出在sprintf字符串的溢出了。但实际上本身为了节省空间,字符串的大小空间是完全一样的。结果最后出现了bug。

        事实证明设立字符数组尽量留些余量,不要完全就多个‘/0’位,最好再加几个,不然就会出现这种事后看来也觉得离谱的bug,既不报错,也不影响显示,反而影响了输入捕获。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值