首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

printf函数的实现解决思路

2012-04-08 
printf函数的实现求大侠帮我检查一下下面函数哪里有问题?#define EOS/0typedef unsigned char UINT8typ

printf函数的实现
求大侠帮我检查一下下面函数哪里有问题?
#define EOS '/0' 
typedef unsigned char UINT8;
typedef unsigned int UINT32;

void PrintF(UINT8 *fmt,UINT32 arg0,UINT32 arg1,UINT32 arg2,UINT32 arg3,UINT32 arg4,UINT32 arg5) /*定义六个参数*/
{
 UINT32 *argArr[6] = {&arg0,&arg1,&arg2,&arg3,&arg4,&arg5}; /*对应六个参数*/
  /*参数数组*/
 UINT32 argCnt = 0; /*参数标记*/
 UINT8 num[16] = "0123456789ABCDEF";

 UINT32 cnt = 0;
 UINT8 ch = *fmt;
 UINT32 arg;
 
 while( cnt<80) /*ch = *fmt++ */
 {
  cnt++;
  if (ch!= '%')
  {
  putchar(ch);
  fmt++;
  if(ch == '\n') putchar('\r');
  }
  else
  {
  fmt++;
  ch=*fmt;
  switch(ch)
  {
  case 'c':
  {
  fmt++;
  if (argCnt<6)
  {
  ch = *argArr[argCnt];
  argCnt++;
putchar(ch);
  }
  break;
  }
  case 'd':
  {
  fmt++;
  if (argCnt<6)
  {
  arg = *argArr[argCnt];
argCnt++;
 
if(arg&0x80000000) /*负数的计算*/
{
putchar('-');
arg = ~arg+1;
}
 
UINT8 str[10];
int s=0;
 
do
{
str[s++] = (arg%10);
arg /= 10;
} while(arg>0);

while(--s>=0)
{
putchar(str[s]+'0');
}
}
  break;
  }
  case 'x':
  {
  fmt++;
  if (argCnt<6)
  {
  arg = *argArr[argCnt];
argCnt++;
 
UINT32 n[50];
UINT32 d=0;
  int s=0;
   
  do
  {
  n[s] = arg%16;
  s++;
  arg = arg/16;
  }while(arg != 0); 
   
  while(--s >= 0)
{
d=n[s];
putchar(num[d]);
}
  }
  break;
  }
  }
  }
 }
}
int main()
{
int a=0x100;
int b=-12345;
char c='A';
PrintF("%d",b,0,0,0,0,0);
return 0;
}

[解决办法]
你这不是printf函数的实现,printf函数是支持可变参数的,用stdarg头文件里定义的那些宏
[解决办法]
lz,原型就错了

printf的原型是
int printf(char* fmt,...);

支持可变参数的,你那个参数数目已经固定了
[解决办法]
下次贴代码时,用格式刷下吧
printf最后几个参数为什么不定义为const &arg

热点排行