这是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; }