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

本文介绍了如何在C语言中实现一个简单的printf函数。通过分析stdio库中的printf函数原型,借助putchar函数逐步实现字符串输出及数值打印功能。文章讨论了在处理不同数值类型时可能遇到的问题,如负数和整数溢出,并提出了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值