【发布时间】:2010-09-29 08:30:49
【问题描述】:
我有一个函数
void func(int x, char *str, ...)
{
...
}
我调用它如下:
func(1, "1", "2", "3");
如何打印函数中所有额外参数 (2, 3) 的值?
【问题讨论】:
标签: c variadic-functions
我有一个函数
void func(int x, char *str, ...)
{
...
}
我调用它如下:
func(1, "1", "2", "3");
如何打印函数中所有额外参数 (2, 3) 的值?
【问题讨论】:
标签: c variadic-functions
来自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
如果它满足您的目的,您可以从此输出中挑选出所需数量的参数。
【讨论】:
通常使用可变参数传递描述可变参数的字符串,例如printf( char *format_string, ... );
这是解决您的问题的解决方案 - 也是惯用的解决方案。
传递一个描述变量参数的附加参数,然后使用该信息来处理变量参数。
所以,如果你收到一个类似 printf 的格式字符串并且它是“%d%u”,你就知道你有一个 int,后面跟着一个 unsigned int。
【讨论】:
在此站点中查找 va_list。示例:What is ellipsis operator in c
【讨论】: