为什么赢了';我的可变参数在C语言中不起作用吗?
我正在尝试创建自己的printf函数,但它不起作用。输出的格式似乎正确,但参数传递似乎不正确,我得到的是垃圾值。我正在使用GCC。请参阅下面的代码为什么赢了';我的可变参数在C语言中不起作用吗?,c,printf,C,Printf,我正在尝试创建自己的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);
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);
我希望循环a 10打印在第一行,循环b 12打印在下一行,但我得到了循环a 542和循环b 542。使用您指定的
va_start
,变量参数从该点开始
由于函数的变量参数列表在attr
之后开始,因此需要:
va_start(args, attr);
请告诉我们来电者,以及正在传递的参数。@TEACH-添加的来电者代码感谢您的建议,但它仍然不起作用。输出与以前没有改变。嗯。我启动了我的虚拟机,运行了代码,它给了我预期的结果。你的代码是在哪台机器上编译的?它是在微控制器dsPIC33FJ128GP802上运行的。托马斯,你能尝试切换函数参数(即先attr,然后fmt)并重试吗。如果没有改变,我和你一样迷失。。。