bug解决-sprintf是个坑

1.背景

由于驱动LCD1602液晶,需要将字符输入到数组里面去,所以采用sprintf的形式,如下:

char dis0[16];

sprintf(dis0,"key_rt%d",key_rt);

LCD1602_ShowStr(0,0,dis0);

在51单片机上时没有问题的,但是在stm32单片机上,显示时候就会报错,卡死在里面。

2.原因分析

2.1 sprintf介绍

srpintf()函数的功能非常强大:效率比一些字符串操作函数要高;而且更具灵活性;可以将想要的结果输出到指定的字符串中,也可作为缓冲区,而printf只能输出到命令行上~

头文件:stdio.h

函数功能:格式化字符串,将格式化的数据写入字符串中。

函数原型:int sprintf(char *buffer, const char *format, [argument]...)

参数:

(1)buffer:是char类型的指针,指向写入的字符串指针;

扫描二维码关注公众号,回复: 15552443 查看本文章

(2)format:格式化字符串,即在程序中想要的格式;

(3)argument:可选参数,可以为任意类型的数据;

函数返回值:buffer指向的字符串的长度;

用处:

(1)格式化数字字符串:在这点上sprintf和printf的用法一样,只是打印到的位置不同而已,前者打印给buffer字符串,后者打印给标准输出,所以sprintf也可以用来将整型转化为字符串,比itoa效率高且如此地简便~比如:sprintf(buffer, "%d", 123456);执行后buffer即指向字符串“123456”~

(2)连接字符:

但是,该函数只有前两个参数是安全的,后面几个参数都是不安全的。

2.2 解决方案

暂时没好的方案,还需要深究里面的原因,留着后续研究。

目前的解决办法是在STM32上采用memcpy的方式进行拼接。

猜你喜欢

转载自blog.csdn.net/weixin_51248645/article/details/130578157