void print_char(char c) { char s[2]; s[0] = c; s[1] = '\0'; print_string(s); } void myprintf(char *fmt, ...) { int i, argc = 0; char * s; while (*fmt){ if (*fmt == '%'){ fmt++; argc++; switch (*fmt){ case 'd': i = *((int*) ((char *)&fmt + argc * sizeof(void *)) ); print_int(i); break; case 's': s = *((char **)((char *)&fmt + argc * sizeof(void *))); print_string(s); break; } } else { print_char(*fmt); } fmt++; } } int main() { myprintf("TEST %d is %s ...\n", 99, "OK"); print_string("All done\n"); return 0; }