Chinaunix首页 | 论坛 | 博客
  • 博客访问: 202522
  • 博文数量: 37
  • 博客积分: 4624
  • 博客等级: 上校
  • 技术积分: 433
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-10 14:06
文章分类

全部博文(37)

文章存档

2012年(6)

2011年(25)

2008年(6)

我的朋友

分类: LINUX

2011-12-28 18:10:51

直接上代码:
  1. #include <stdio.h>
  2. #include <stdarg.h>

  3. union value {
  4.     char *str_value;    
  5.     char char_value;
  6.     int int_value;
  7.     double double_value;
  8. };

  9. void myprintf(char *format, ...)
  10. {
  11.     va_list ap;
  12.     char *p;
  13.     union value v;

  14.     va_start(ap, format);
  15.     for (p = format; *p; p++) {
  16.         if (*p != '%') {
  17.             putchar(*p);
  18.             continue;
  19.         }
  20.         
  21.         switch (*++p) {
  22.         case 's':
  23.             v.str_value = va_arg(ap, char*);
  24.             printf("%s", v.str_value);
  25.             break;
  26.         case 'c':
  27.             v.char_value = va_arg(ap, int);
  28.             printf("%c", v.char_value);
  29.             break;
  30.         case 'd':
  31.             v.int_value = va_arg(ap, int);
  32.             printf("%d", v.int_value);
  33.             break;
  34.         case 'f':
  35.             v.double_value = va_arg(ap, double);
  36.             printf("%f", v.double_value);
  37.             break;
  38.         }
  39.     }
  40.     va_end(ap);
  41. }

  42. int main()
  43. {
  44.     myprintf("str:%s|char:%c|int:%d|double:%f", "hahaha", 'A', 123, 123.456);
  45.     printf("\n");
  46. }

阅读(584) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~