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 }

 

转载于:https://www.cnblogs.com/csxyc/p/3724613.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值