vsnprintf函数:C标准库函数-<starg.h>
(虽然网上说实在stdarg.h中,但是我在arm的stdarg.h中没有看到这个函数,有点疑惑)
int vsnprintf(char *s, size_t n, const char *format, va_list arg)
功能:将格式化的可变参数列表写入大小的缓冲区,如果在printf上使用格式,则使用相同的文本组成字符串,如果使用arg标识的变量则将参数列表中的元素作为字符串存储在char型指针s中。
传参
s:指向存储结果C字符串的缓冲区的指针。
n:要转换的字符的长度(bytes)
formate:可变参数
arg:申请参数列表的变量,标识使用va_start初始化的变量参数列表的值。
返回值
如果n值勾搭,则会写入的字符数,但是不包括’\0’的终止符。如果发生编码错误则返回值小于0.
注:只有返回值是非负而且小于n时,字符串才完全被写入。
注:
vsnprintf函数一般都与va_start和va_end一起使用
实例
#include <stdio.h>
#include <stdarg.h>
#define MAXLEN 20
int test_log(char* format, ...)
{
char str_tmp[MAXLEN];
int i=0,j=0;
va_list arg;
va_start (arg, format);
i=vsnprintf(str_tmp, MAXLEN, format, arg);
va_end(arg);
printf("%s", str_tmp);
return i;
}
void main()
{
int i=test_log("This is vsprintf test:%s%d\n","string",1024);
}
运行结果为:
This is vsprintf test:string1024
嵌入式中这个函数常被用在debug函数中来将打印调试信息,跟调试串口绑定在一起,可以实现可变参的组合输出,想当与实现一个简单的printf函数已供一个debug的接口。
如下: