43.可变参数实现printf

 1 #include <stdio.h>
 2 #include  <stdio.h>
 3 #include <Windows.h>
 4 #include <stdarg.h>
 5 
 6 void myprintf(char *ptstr, ...)//可变参数
 7 {
 8     va_list ap;//起始点
 9     va_start(ap, ptstr);//从ptstr开始向后读取数据存放在ap中
10     char flag;//依次读取一个字符
11     while (*ptstr != '')
12     {
13         flag = *ptstr;
14         if (*ptstr != '%')
15         {
16             putchar(flag);//打印字符
17             ptstr++;
18         }
19         else
20         {
21             ptstr++;//往前 %d %c %s %%
22             flag = *ptstr;//取出字符
23 
24             switch (flag)
25             {
26             case 'd':
27             {
28                 int data = va_arg(ap, int);//读取下一个参数安装int
29                 printf("%d", data);//整数转化字符串,挨个显示字符
30                 break;
31             }
32 
33             case 's':
34             {
35                 char* data = va_arg(ap, char*);//读取下一个参数安装int
36                 printf("%s", data);//整数转化字符串,挨个显示字符
37                 break;
38             }
39 
40             case 'c':
41             {
42                 char data = va_arg(ap, char);//读取下一个参数安装int
43                 putchar(data);
44                 break;
45             }
46             }
47             ptstr++;
48         }
49     }
50     va_end(ap);//结束读取
51 }
52 
53 void main()
54 {
55     myprintf("abcd%s%c
","成都市",'t');
56 
57     system("pause");
58 }
原文地址:https://www.cnblogs.com/xiaochi/p/8353071.html