#include #include struct spurious { int anumber; }; int first(char *buf, char *fmt, ...) { int pos, number; va_list args; int dummy; char *bp = buf; va_start(args, fmt); for (pos = 0; fmt[pos]; pos++) if (fmt[pos] == 'i') { number = va_arg(args, int); sprintf(bp, "%d", number); bp += strlen(bp); } else *bp++ = fmt[pos]; va_end(args); *bp = 0; return dummy; } struct spurious second(char *buf,char *fmt, ...) { int pos, number; va_list args; struct spurious dummy; char *bp = buf; va_start(args, fmt); for (pos = 0; fmt[pos]; pos++) if (fmt[pos] == 'i') { number = va_arg(args, int); sprintf(bp, "%d", number); bp += strlen(bp); } else *bp++ = fmt[pos]; va_end(args); *bp = 0; return dummy; } main() { char buf1[100], buf2[100]; first(buf1, "i i ", 5, 20); second(buf2, "i i ", 5, 20); if (strcmp ("5 20 ", buf1) || strcmp ("5 20 ", buf2)) abort(); exit(0); }