该程序接受有限数量的整数,并使用va_arg提供的宏输出它们(标准)
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
void main()
{
foo(5,3,4);
}
void foo(int i,...){
va_list argp;
va_start(argp,i);
int p;
while ((p = va_arg(argp,int))!= NULL)printf("%d",p);
va_end(argp);
}
然而,尽管没有编译/语法错误,我没有得到我想要的输出我在bash上看到这个:
我怎样才能修改我的程序以便得到:5,3,4?
最佳答案
您需要传递一个显式的最后一个值并就此停止,因为va_arg
无法检测参数的结尾。
#include <stdarg.h>
#include <stdio.h>
void foo(int i, ...) {
va_list argp;
va_start(argp, i);
do {
printf("%d\n", i);
} while ((i = va_arg(argp, int)) != -1);
va_end(argp);
}
int main() {
foo(5, 3, 4, -1);
return 0;
}
输出:
5
3
4