#include #include "string.h" int sprintf(char *str, const char *format, ...) { va_list argp; va_start(argp, format); int rval = vsprintf(str, format, argp); va_end(argp); return rval; } int vsprintf(char *str, const char *format, va_list argp) { const char *p; int i; char *s; for (p = format; *p != '\0'; p++) { if (*p != '%') { *str++ = *p; } else { switch (*++p) { case 'c': i = va_arg(argp, int); *str++ = (char)i; break; case 's': s = va_arg(argp, char *); while (*str++ = *s++) ; str--; break; case 'd': s = itoa(va_arg(argp, int)); while (*str++ = *s++) ; str--; break; case 'x': s = itoa_base(va_arg(argp, unsigned int), 16); while (*str++ = *s++) ; str--; break; case '%': *str++ = '%'; break; } } } *str = '\0'; return 0; }