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类型的指针,指向写入的字符串指针;
(2)format:格式化字符串,即在程序中想要的格式;
(3)argument:可选参数,可以为任意类型的数据;
函数返回值:buffer指向的字符串的长度;
用处:
(1)格式化数字字符串:在这点上sprintf和printf的用法一样,只是打印到的位置不同而已,前者打印给buffer字符串,后者打印给标准输出,所以sprintf也可以用来将整型转化为字符串,比itoa效率高且如此地简便~比如:sprintf(buffer, "%d", 123456);执行后buffer即指向字符串“123456”~
(2)连接字符:
但是,该函数只有前两个参数是安全的,后面几个参数都是不安全的。
2.2 解决方案
暂时没好的方案,还需要深究里面的原因,留着后续研究。
目前的解决办法是在STM32上采用memcpy的方式进行拼接。