自己实现的简单Printf函数

本文介绍了一个简单的自制printf函数实现,该函数通过解析格式字符串并根据不同的格式标识符调用相应的处理逻辑来输出指定格式的数据。文章展示了如何处理字符、字符串、整数及浮点数的格式化输出。

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

注意:

1.*pStr != '\0'

 2.sprintf正确使用

3.double不能用float否则会溢出非法访问

4. *pFormat != '\0'

5.pFormat 不能用pTempFormat

源代码:

#include <stdio.h>

#include <stdarg.h>
void PrintStr(const char *pStr)
{
while(*pStr != '\0')// 1.*pStr != '\0'
{
putchar(*pStr);
pStr++;
}
}


void MyPrintf(const char *pFormat, ...)
{
va_list args;
va_start(args,pFormat);// 5.pFormat 不能用pTempFormat
while(*pFormat != '\0') // 4. *pFormat != '\0'
{
if(*pFormat != '%')
{
putchar(*pFormat);
pFormat++;
}
else
{
pFormat++;
if(*pFormat == '\0')
{
break;
}
switch((int)*pFormat)
{
case (int)'c':
{
char c = va_arg(args, char);
putchar(c);
pFormat++;
}
break;
case (int)'s':
{
char *pStr = va_arg(args, char*);
PrintStr(pStr);
pFormat++;
}
break;
case (int)'d':
{
int nNum = va_arg(args, int);
char strNum[32];
sprintf(strNum, "%d", nNum); // 2.sprintf正确使用
PrintStr(strNum);
pFormat++;
}
break;
case (int)'f':
{
double fNum = va_arg(args, double); // 3.double不能用float否则会溢出非法访问
char fStr[64];
sprintf(fStr, "%1.4f", fNum);
PrintStr(fStr);
pFormat++;
}
break;

}// switch
}// else
}// while
}


void main()
{
MyPrintf("I am %s love %s, total Age is:%d, %c, %f \n", "JesseCen", "SandyOu", 50, 'M', 80000.08);
while(1);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值