- 动机:
在我们的实际项目中,有时候,往往需要做一个 类似于printf 这样的标准打印函数,来输出不定参数到我们指定的串口上,下面记述制作过程:
首先,我之所以会这么做,是因为我也不知道输出到串口的字符有多少,而且也希望向 printf("%d, %s, %c\n", a, buf, b); 这样的形式传递我的变量值,那么上代码(C语言):
1 #include <stdarg.h>
2 int div_printf(const char *pcFormat, ...)
3 {
4 va_list args;
5 int len;
6 char buf[1024] = {0};
7
8 va_start(args, pcFormat);
9 len = vsnprintf(buf, sizeof(buf), pcFormat, args);
10 va_end(args);
11
12 send_uart1(buf);
13 send_uart1("\r\n");
14 return len;
15 }
通过上面的函数步骤,就可以做出标准打印函数的效果,这里需要注意的是,在第 12 13行中,需要修改为你自己的串口输入函数。
- 代码解释
在上述函数或printf函数中,都会用到参数 … (省略号),这个省略号的代表的是告诉编译器,除了有一个参数pcFormat固定以外,后面跟的参数的个数和类型是可变的。因此,针对不定参数,就需要用到诸如va_start; tva_arg; va_end; 这样的函数。
vsprintf 这个函数是用于向字符串中打印数据、数据格式用户自定义,就好比有下面这个程序段:
int a = 22;
div_printf("a = %d", a);
vsprintf 的作用就是将数据a 以字符的形式输出到一个字符数组中。
1万+

被折叠的 条评论
为什么被折叠?



