#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
void printi(int n)
{
char *p,*q;
p=malloc(100);
q=p;
do{
*p=n%10+48;
p++;
}while(n=n/10);
p--;
while(p!=q)
putchar(*p--);
putchar(*p);
free(q);
}
void printa(char* p)
{
char *q=p;
while(*q)
putchar(*q++);
}
void printx(int n)
{
char *p,*q;
p=malloc(100);
q=p;
do{
*q=n%16>=10?n%16+55:n%16+48;
q++;
}while(n=n/16);
q--;
while(p!=q)
putchar(*q--);
putchar(*q);
free(p);
}
int myprintf(const char *format, ...)
{
//va_list p;
//va_start(p,format);
char c;
int * p;
p = (int *)&format;
p++;
while((c = *format++) != '\0')
{
switch (c)
{
case '%':
c = *format++;
switch (c)
{
case 'c':
putchar(*(char *)p++);
//putchar(va_arg(p,int));
break;
case 'd':
printi(*(int *)p++);
//printi(va_arg(p,int));
break;
case 's':
printa((char *)*p++);
//printa(va_arg(p,char *));
break;
case 'x':
printx(*(int *)p++);
//printx(va_arg(p,int));
break;
default:
break;
}
break;
default:
putchar(c);
}
}
p = NULL;
return 0;
}
int main(void)
{
myprintf("c=%c, d=%d, s=%s, x=%x\n", 'A', 100, "hello", 200);
return 0;
}
转载于:https://blog.51cto.com/xiaohei198975/1223171