今天写一个自己的printf函数,练练手,比较简单,只写了%c,%d,%s。这三个类型。各位大神可以针对我的问题指点指点哈。
主要用到可变参数列表。在这我不详解,有兴趣问度娘。废话不说,代码献上!
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
int my_printf(const char *fmt, ...)
{
va_list args; //创建一个指向未知参数列表的指针
va_start(args, fmt); //初始化args为未知参数列表的第一个参数的地址
const char *str = fmt;
while (*str != '\0') //循环遍历格式字符串
{
switch (*str)
{
case 'd': //整形
{
int val = va_arg(args, int); //va_arg可以根据第二个参数在未知参数列表中获取一个参数
char res[16] = { 0 }; //va_arg在获取一个参数之后,会让arg向后移动,指向下一个未知参数
_itoa_s(val, res, 10);
fputs(res, stdout);
break;
}
case 'c': { //字符型
char ch = va_arg(args, char);
putc(ch, stdout);
break;
}
case 's': { //字符串型
char *res = va_arg(args, char*);
fputs(res, stdout);
break;
}
}
++str;
}
va_end(args);
return 0;
}
int main(void)
{
int i = 100;
char c = 'b';
char d = 'i';
char e = 't';
char *str = "hello";
my_printf(" %s , %c , %c , %c , %d", str, c, d, e, i);
system("pause");
return 0;
}