【发布时间】:2010-12-11 15:24:13
【问题描述】:
我正在尝试创建自己的 printf 函数,但它不起作用。输出似乎是正确的格式,但参数似乎没有正确传递,我得到垃圾值。我正在使用 GCC。请参阅下面的代码。
void con_printf(char *fmt, char attr, ...)
{
char *s = printf_buffer;
va_list args;
va_start(args, fmt);
vsnprintf(s, CON_TMPSIZE, fmt, args);
va_end(args);
while(*s != '\0')
{
con_putchr(*s, attr);
s++;
}
con_flush();
}
printf_buffer 定义为 CON_TMPSIZE 字节长,在此版本中为 128 字节。这是针对小型微控制器的,但我希望该原理适用于任何处理器。
我这样称呼它:
con_printf("LOOP a %d\n", 0, 10);
con_printf("LOOP b %d\n", 0, 12);
我希望 LOOP a 10 打印在第一行,LOOP b 12 打印在下一行,但我得到 LOOP a 542 和 LOOP b 542。
【问题讨论】:
-
请告诉我们调用者,以及传入的参数。
-
@EvilTeach - 添加调用者代码