我有一个功能
void func(int x, char *str, ...)
{
...
}
我按如下方式调用它:
func(1, "1", "2", "3");
如何在函数中打印所有额外参数(2,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