文章出处:http://www.cnblogs.com/phinecos/archive/2007/08/24/868524.html
#include "stdio.h"
#include "stdlib.h"
#include <stdarg.h>
void myprintf(char* fmt, ) //一个简单的类似于printf的实现,//参数必须都是int 类型
{
//char* pArg=NULL; //等价于原来的va_list
va_list pArg;
char c;
// pArg = (char*) &fmt; //注意不要写成p = fmt !!因为这里要对参数取址,而不是取值
// pArg += sizeof(fmt); //等价于原来的va_start
va_start(pArg,fmt);
do
{
c =*fmt;
if (c != '%')
{
putchar(c); //照原样输出字符
}
else
{//按格式字符输出数据
switch(*++fmt)
{
case 'd':
printf("%d",*((int*)pArg));
break;
case 'x':
printf("%#x",*((int*)pArg));
break;
case 'f':
printf("%f",*((float*)pArg));
default:
break;
}
//pArg += sizeof(int); //等价于原来的va_arg
va_arg(pArg,int);
}
++fmt;
}while (*fmt != '\0');
//pArg = NULL; //等价于va_end
va_end(pArg);
return;
}
int main(int argc, char* argv[])
{
int i = 1234;
int j = 5678;
myprintf("the first test:i=%d",i,j);
myprintf("the secend test:i=%f; %x;j=%d;",i,0xabcd,j);
system("pause");
return 0;
}