ゴメソ試したら動かなかったんで、作成中かその他のソースだったらしひ
こっちが正しい奴みたい。

#include <stdarg.h>
typedef char c;
int sprintf(c*b,c*f,...)
{
 va_list v;
 unsigned i,n;
 c x[9]="%csuxodi",*o,*h=b,s[99];
 va_start(v,f);
 while(*f){
  if(*f^37)
   *b++=*f;
  else{
   o=s+97;s[98]=i=0;x[8]=*++f;
   while(x[i++]!=*f);
   if(i<3)*o=i==1?37:va_arg(v,c);
   else if(i<4)o=va_arg(v,c*);
   else if(i<9){
    n=va_arg(v,int);
    if(i>6)
     if((int)n<0)*b++='-',n=~n+1;
    i=i==5?16:i==6?8:10;
    while(*o="0123456789abcdef"[n%i],n/=i)o--;
   }
   while(*b=*o++)b++;
  }
  f++;
 }
 va_end(v);
 return b-h;
}

#include <stdio.h>
int main()
{
 int i;
 char buf[512];
 printf("\n%d:%s\n", i, buf);
 i = sprintf(buf, "%%%s%s%s %c %d %u %x %i %u %o", "test1 ", "test2 ", "test3", 'a', -123, 123, 0x123fe, -123, -123, 83);
 printf("\n%d:%s\n", i, buf);
 return 0;
}