1 #include <stdio.h>
2 #include <stdarg.h>
3
4 struct spurious
5 {
6 int anumber;
7 };
8
first(char * buf,char * fmt,...)9 int first(char *buf, char *fmt, ...)
10 {
11 int pos, number;
12 va_list args;
13 int dummy;
14 char *bp = buf;
15
16 va_start(args, fmt);
17 for (pos = 0; fmt[pos]; pos++)
18 if (fmt[pos] == 'i')
19 {
20 number = va_arg(args, int);
21 sprintf(bp, "%d", number);
22 bp += strlen(bp);
23 }
24 else
25 *bp++ = fmt[pos];
26
27 va_end(args);
28 *bp = 0;
29 return dummy;
30 }
31
second(char * buf,char * fmt,...)32 struct spurious second(char *buf,char *fmt, ...)
33 {
34 int pos, number;
35 va_list args;
36 struct spurious dummy;
37 char *bp = buf;
38
39 va_start(args, fmt);
40 for (pos = 0; fmt[pos]; pos++)
41 if (fmt[pos] == 'i')
42 {
43 number = va_arg(args, int);
44 sprintf(bp, "%d", number);
45 bp += strlen(bp);
46 }
47 else
48 *bp++ = fmt[pos];
49
50 va_end(args);
51 *bp = 0;
52 return dummy;
53 }
54
main()55 main()
56 {
57 char buf1[100], buf2[100];
58 first(buf1, "i i ", 5, 20);
59 second(buf2, "i i ", 5, 20);
60 if (strcmp ("5 20 ", buf1) || strcmp ("5 20 ", buf2))
61 abort();
62 exit(0);
63 }
64