利用可变参数列表简单实现printf函数的功能

这篇博客介绍如何利用可变参数列表来实现类似printf的功能。通过分析第一个参数中的‘%’符号和后续字符来确定输出参数的类型和数量。代码示例展示了如何处理字符串、字符和整数的输出,同时提出了递归方式处理整数输出的思路。

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

利用可变参数来实现输出函数,有两点必须已知:

第一,需知输出参数的个数,这个 可以通过可变参数列表的第一个参数可知。

第二,需知各输出参数的类型,这个也可以通过可变参数列表的第一个参数可知。

例如:实现输出:hello world! 100

则传参时,可将hello看做一字符串,world看做5个字符,!原样输出,100为整数输出,即可表示为:

myprintf("%s %c%c%c%c%c! %d","hello",'w','o','r','l','d',100);

此时,第一个参数中可根据“%”的个数以及原样输出的字符串个数来显示输出参数的总个数;

         可根据“%”后的字符不同表示不同类型的参数。

代码如下:

引入头文件:


首先是主函数传参:

然后是myprintf函数:

首先定义可变参数的几个宏:因为myprintf函数的第一个参数是字符串类型,所以用字符指针接收


此时,arg指向可变参数列表的第二个参数

然后分析第一参数中的各字符:

当遇到%时,读取%后的下一个字符,若为“s”,“c”,“d”中的任一个,则进行字符串,字符,整数的输出

若没有遇到%,而遇到其他字符,则原样输出其他字符,代码如下:




另外,在对整型输出时,还可以运用递归实现,比如,整数1234,输出为1,2,3,4,在4输出之前先输出123,

在输出3之前,先输出12,在输出2之前,先输出1。当要输出的数小于10时,可直接输出。

上述"%d"部分的代码可替换如下:




运行结果如下:






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值