Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么赢了';我的可变参数在C语言中不起作用吗?_C_Printf - Fatal编程技术网

为什么赢了';我的可变参数在C语言中不起作用吗?

为什么赢了';我的可变参数在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);

我正在尝试创建自己的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);

我希望循环a 10打印在第一行,循环b 12打印在下一行,但我得到了循环a 542和循环b 542。

使用您指定的
va_start
,变量参数从该点开始

由于函数的变量参数列表在
attr
之后开始,因此需要:

va_start(args, attr);

请告诉我们来电者,以及正在传递的参数。@TEACH-添加的来电者代码感谢您的建议,但它仍然不起作用。输出与以前没有改变。嗯。我启动了我的虚拟机,运行了代码,它给了我预期的结果。你的代码是在哪台机器上编译的?它是在微控制器dsPIC33FJ128GP802上运行的。托马斯,你能尝试切换函数参数(即先attr,然后fmt)并重试吗。如果没有改变,我和你一样迷失。。。