Сначала завершите ваш список 0, потому что вы проверяете! = 0, чтобы определить конец.А также:
while((i=va_arg(k,int))!=0)
вместо
while(i=va_arg(k,int)!=0)
! = Имеет более высокий приоритет, чем =
Это даст ожидаемый результат:
1 2 3 4 5 6
Вот полный код:
#include<stdio.h>
#include<stdarg.h>
void fun(int a,...)
{
va_list k;
va_start(k,a);
int i=0;
printf("%d ",a);
while((i=va_arg(k,int))!=0)
{
printf(" %d ",i);
}
va_end(k);
}
int main()
{
fun(1,2,3,4,5,6,0);
printf("\n");
//fun(2,4,5,0);
printf("\n");
//fun('c','f','g','l','\0');
getch();
return 0;
}