问题产生场景

我在嵌入式单片机编程的过程经常遇到要将其他类型的数据转化为字符串的情况,在少量的情况下可以通过数组+ASCII码来一位一位操作,但整体还是太麻烦,所以有了以下方法

解决方式

使用C语言 string.h 库中的函数sprintf,具体介绍如下(源自百度)

sprintf指的是字符串格式化命令

函数声明为

1
int sprintf(char *string, char *format [,argument,...]);,

主要功能是把格式化的数据写入某个字符串中,即发送格式化输出到 string 所指向的字符串。sprintf 是个变参函数。使用sprintf 对于写入buffer的字符数是没有限制的,这就存在了buffer溢出的可能性。(经常遇到且难排查),并且函数如果成功,则返回成功写入的字符总数

为了解决这个问题,可以考虑使用 snprintf函数,该函数可对写入字符数做出限制

函数原型为

1
int snprintf(char *str, size_t size, const char *format, ...);

即在使用的时候就规定写入的字节长度,多的不写,防止溢出

若成功则返回预写入的字符串长度,若出错则返回负值。

与snprintf的返回值不同,sprintf的返回值是成功写入的字符串长度,此处需要谨慎处理。

wechat