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 }

 

你可能感兴趣的:(printf)