标签:创建函数利用可变参数列表的形式模拟实现printf的功能
★创建函数利用可变参数列表的形式模拟实现printf的功能。
模拟简单的输入单个字符和字符串时的输出形式
如:输入:%c %c %c %c %c\t%s,‘h‘,‘e‘,‘l‘,‘l‘,‘o‘,"welcome to here!"
输出:h e l l o welcome to here!
#include<stdio.h> #include<stdlib.h> #include<stdarg.h> //需引入stdarg的头文件以便建立可变参数列表 void new_printch(char ch) //对于单个字符处理的函数 { putchar(ch); //这里切记不可使用printf的输出形式,不然就没有编写此函数的必要了 } void my_printstr(char* str) //对于字符串的输出,调用单个字符输出函数,并使指针不断后移,直到遇到‘\0’,表示一个完整的字符串 { while (*str) { new_printch(*str++); } } void my_print(char* val, ...) //char*表示了压栈时指针的偏移量,偏移一个字符指针的大小 { char* vargpch = NULL; char vargch = 0; int vargint = 0; char *pval = NULL; va_list vp; //va_list,va_start,va_end是可变参数列表的表示形式,注意start后的参数,若写错或写反则指针偏移时必然出错,越界取到不可预知的随机值 va_start(vp, val); pval = val; while (*pval) { if (*pval == ‘%‘) { switch (*(++pval)) { case ‘c‘: //对于单个字符处理的入口 vargch = va_arg(vp, int); new_printch(vargch); break; case ‘s‘: //对于字符串处理的入口 vargpch = va_arg(vp, char*); my_printstr(vargpch); break; default: break; } pval++; } else { new_printch(*pval++); } } va_end(vp); } int main() { my_print("%c %c %c %c %c\t%s\n",‘h‘,‘e‘,‘l‘,‘l‘,‘o‘,"welcome to here!"); system("pause"); return 0; }
本文出自 “温暖的微笑” 博客,请务必保留此出处http://10738469.blog.51cto.com/10728469/1711585
标签:创建函数利用可变参数列表的形式模拟实现printf的功能
原文地址:http://10738469.blog.51cto.com/10728469/1711585