这是stdio.h包中printf函数的一个简单实现代码,只针对%d,%s,%c作为处理。有兴趣的朋友可以将其继续扩展,也可以去寻找linux内核中的printf函数源代码加以研究。
实现代码主要用到了va_list,关于va_list方面的内容可参见点击打开链接
代码:
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
int myprintf(const char *fmt, ...) {
va_list args;
va_start(args, fmt);
const char *str = fmt;
while(*str != '\0') { //循环遍历格式字符串
if(*str != '%') { //遇到非'%'字符
putc(*str, stdout);
++str;
continue;
} else { //遇到'%'
++str;
switch(*str) {
case 'd': { //%d
int val = va_arg(args, int);
char res[16] = {0};
itoa(val, res, 10);
fputs(res, stdout);
break;
}
case 'c': { //%c
char ch = va_arg(args, char);
putc(ch, stdout);
break;
}
case 's': { //%s
char *res = va_arg(args, char*);
fputs(res, stdout);
break;
}
}
++str;
}
}
va_end(args);
return 0;
}
int main(void) {
int i = 1;
char c = 'a';
char *str = "feng";
myprintf("hello, word! %d, %c, %s", i, c, str); //hello, world! 1, a, feng
system("pause");
return 0;
}