自己实现printf函数,用...

本文深入探讨了C语言中参数传递的机制,特别关注了如何高效处理字符串参数,并通过实例展示了如何利用指针进行复杂的字符串操作。通过详细解释不同类型的参数传递方式以及字符串处理的细节,旨在提升读者对于C语言底层实现的理解和实践能力。

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

#include <stdio.h>




void test(const  char* i,...)
{
//循环读取
char* pChar=(char*)i;//这个指针是定位字符串的指针
char cType;
char* pNextPos=(char*)&i+4;//用这个指针指向传递参数区域的位置
while(*pChar!=0) //表示到了字符串的末尾
{
//如果不是%,则一直取到%为止
if (*pChar!='%')
{
printf("%c",*pChar);
pChar++;
}
else
{
cType=*(++pChar);
switch(cType)
{
case 'c':
case 'C':
printf("%c",*((char*)pNextPos));
//打印完毕之后,要把这个位置指针指到下一个位置
pNextPos+=4;
break;
case 'd':
case 'D':
printf("%d",*((int*)pNextPos));
//打印完毕之后,要把这个位置指针指到下一个位置
pNextPos+=4;
break;
case 'f':
case 'F':
printf("%f",*((double*)pNextPos));
//打印完毕之后,要把这个位置指针指到下一个位置
pNextPos+=8;
break;
case 's':
case 'S':
printf("%s",*((int*)pNextPos));
//打印完毕之后,要把这个位置指针指到下一个位置
pNextPos+=4;
break;


}
pChar++;
}


}
}
void main()
{
int i=1;
test("%s%f%c%d","asdfsa",1.1,'a');
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值