如何在C中打印变量参数的值?

时间:2010-09-29 08:30:50

标签: c variadic-functions

我有一个功能

void func(int x, char *str, ...)
{
  ...
}

我按如下方式调用它:

func(1, "1", "2", "3");

如何在函数中打印所有额外参数(2,3)的值?

3 个答案:

答案 0 :(得分:1)

STDARG的手册页中,关于使用va_arg获取下一个论点:

  

如果没有下一个参数,或者   如果类型与。不兼容   实际下一个参数的类型(如   根据默认提升   参数促销),随机错误   会发生。

因此,除非您希望随机错误进入,否则您应事先知道参数的数量。

即便如此,如果你想谨慎对待风,你可以尝试:

void func(int x,char *str, ...)
{
    va_list al;
    va_start(al,str);

    while(x>0)
    {
        str=va_arg(al,char *);
        --x;      
    }

    while(str != NULL)
    {
        printf("%s ",str);
        str=va_arg(al,char *);
    }
    va_end(al);
}

使用,

func(1,"1","2","3");

我得到了输出,

2 3 U��WVS�O  

如果它满足您的目的,您可以从此输出中选择所需数量的参数。

答案 1 :(得分:1)

通常使用变量参数来传递描述变量参数的字符串,例如printf(char * format_string,...);

这是解决问题的方法 - 也是解决问题的常用解决方案。

传递一个描述变量参数的附加参数,然后使用该信息处理变量参数。

因此,如果你收到一个类似printf的格式字符串并且它是“%d%u”,你知道你有一个int,后跟一个unsigned int。

答案 2 :(得分:0)

在此站点中查找va_list。示例:What is ellipsis operator in c