C语言学习(简版printf函数实现)

stdio库中的printf的函数原型:

int printf( const char *format, … );​ // 函数的返回值为int, 表示正确输出的参数个数;


const char * frm

frm指针指向的内容为常量,不可以更改

char * const frm

frm的地址为常量不可更改,指向的内容可更改;

简版printf函数 实现思路

借助putchar函数,实现从0到1 的转变.学习重要的是学习思维


  • my_printf函数代码

    #include <stdio.h>
    
    
    int my_printf(const char *frm, ...){
         
        int cnt = 0;
        #define PUTC(a) putchar(a),++cnt
     	for (int i = 0; frm[i]; i++) {
         //字符串末尾隐藏'\0',ASCII为0;
           // putchar(frm[i]), cnt++;
        	PUTC(frm[i]);
        }   
        return cnt;//cnt代表成功打印字符的个数;
    }
    
    
    • 完成第一个工能,可以打印字符串了


      功能完善改进
      • 变量值的解析(如何根据格式控制符和变参打印)
      int my_printf(const char *frm, ...){
             
          int cnt = 0;
          va_list arg;
          va_start(arg, frm);//用va宏去取参数
          #define PUTC(a) putchar(a),++cnt
       	for (int i = 0; frm[i]; i++) {
             //字符串末尾隐藏'\0',ASCII为0;
             // putchar(frm[i]), cnt++;
          	PUTC(frm[i]);
          }   
          #undef PUTC
          va_end(arg);//废品回收
          return cnt;//cnt代表成功打印字符的个数;
      }
      
      
      • 首先利用va可以获得后面变参列表的参数

      • 然后我们对frm里面的字符进行判断

        #include <stdarg.h>
        int my_printf(const char *frm, ...){
             
              int cnt = 0;
              va_list arg;
              va_start(arg, frm);//用va宏去取参数
        #define PUTC(a) putchar(a), +cnt
             	for (int i = 0; frm[i
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值