printf简单实现版本

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


你可能感兴趣的:(c,list,扩展,linux内核)