OpenEdv-开源电子网

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

关于sprintf函数的使用请教一下

[复制链接]

97

主题

140

帖子

0

精华

高级会员

Rank: 4

积分
657
金钱
657
注册时间
2020-5-17
在线时间
178 小时
发表于 2022-1-19 16:58:56 | 显示全部楼层 |阅读模式
如图为什么只有buf2能正常打印,而 buf1是空的
1.png
2.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8463
金钱
8463
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-1-19 17:31:42 | 显示全部楼层
字符串要注意结尾加0,buf1定义了3字节空间,sprintf可能会在最后加个0,导致占用4字节空间,称之为溢出或数组越界,
buf2也一样。建议将buf1 buf2定义大一些。
专治疑难杂症
回复 支持 反对

使用道具 举报

13

主题

250

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2248
金钱
2248
注册时间
2019-8-7
在线时间
364 小时
发表于 2022-1-19 17:58:33 | 显示全部楼层
局部变量的地址是向低地址增长的 所以你第一个sprintf的结束符正好放在了buf1的首地址上 导致你buf1输出为空 sprintf转换字符串的时候 末尾会自动加结束符的
回复 支持 反对

使用道具 举报

13

主题

644

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1976
金钱
1976
注册时间
2021-4-16
在线时间
505 小时
发表于 2022-1-20 10:08:37 | 显示全部楼层
创建数组的时候老师不是有说过最好是多给一个字节的空间吗,多给一个字节就没事了,用来存放字符串结束符。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 06:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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