该程序接受有限数量的整数,并使用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

07-26 01:52