1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
/* va_copy example */
#include <stdio.h> /* printf, vprintf*/
#include <stdlib.h> /* malloc */
#include <string.h> /* strlen, strcat */
#include <stdarg.h> /* va_list, va_start, va_copy, va_arg, va_end */
/* print ints until a zero is found: */
void PrintInts (int first,...)
{
char * buffer;
const char * format = "[%d] ";
int count = 0;
int val = first;
va_list vl,vl_count;
va_start(vl,first);
/* count number of arguments: */
va_copy(vl_count,vl);
while (val != 0) {
val=va_arg(vl_count,int);
++count;
}
va_end(vl_count);
/* allocate storage for format string: */
buffer = (char*) malloc (strlen(format)*count+1);
buffer[0]='\0';
/* generate format string: */
for (;count>0;--count) {
strcat (buffer,format);
}
/* print integers: */
printf (format,first);
vprintf (buffer,vl);
va_end(vl);
}
int main ()
{
PrintInts (10,20,30,40,50,0);
return 0;
}
|