首页 > 代码库 > printf的实现(不借助stdarg.h中的宏)

printf的实现(不借助stdarg.h中的宏)

实现了%d %x %c %s 

对变长函数的参数取址有了深刻的理解 ,蒋yy的实验任务其实还是很有帮助的^_^

 1 int printf ( const char * format, ... )
 2 {
 3     int Count=0;
 4     int index=0;
 5     char buffer[32];
 6     int t=&format;
 7     t+=4;
 8     while(*format){
 9         if(*format==%){
10             if(*(format+1)==d)//10进制整数
11             {
12                 format++;
13                 int temp=*(int*)t;
14 
15                 while(temp){
16                 buffer[index]=temp%10+48;
17                 temp/=10;
18                 index++;                
19                 }
20                 index--;
21                 while(index>=0){
22                 putchar(buffer[index]);
23                 index--;
24                 }
25                 index++;    
26                 t+=4;
27             }
28             else if(*(format+1)==x)//16进制整数
29             {
30                 format++;
31                 int temp=*(int*)t;
32                 while(temp){
33                 if(temp%16<=9)
34                 buffer[index]=temp%16+48;
35                 else
36                 buffer[index]=temp%16-10+65;
37                 temp/=16;
38                 index++;
39                 }
40                 index--;
41                 while(index>=0){
42                 putchar(buffer[index]);
43                 index--;
44                 }
45                 index++;    
46                 t+=4;
47             }
48             else if(*(format+1)==c)//char
49             {
50                 format++;
51                 char temp=*(char*)t;
52                 putchar(temp);
53                 t+=4;
54             }
55             else if(*(format+1)==s)//string
56             {
57                 format++;
58                 char*temp=*(char**)t;
59                 while(*temp){
60                 putchar(*temp);
61                 temp++;
62                 }
63                 t+=4;
64             }
65             
66         }
67         else putchar(*format);
68         format++;
69     
70     }
71 
72     return 0;
73 }