【问题标题】:How to print values of variable arguments in C?如何在C中打印变量参数的值?
【发布时间】:2010-09-29 08:30:49
【问题描述】:

我有一个函数

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

我调用它如下:

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

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

【问题讨论】:

    标签: c variadic-functions


    【解决方案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  
    

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

    【讨论】:

      【解决方案2】:

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

      这是解决您的问题的解决方案 - 也是惯用的解决方案。

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 你链接到你自己对一个封闭问题的回答,它只包含一个我从未听说过的博客的链接。
        • @reemrevnivek。现在你已经听说了。
        • 和?如果文章很有趣,并且该问题的其他答案也很有趣,该怎么办?
        猜你喜欢
        • 2021-01-12
        • 1970-01-01
        • 1970-01-01
        • 2019-03-14
        • 2020-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多