标签:创建函数利用可变参数列表的形式模拟实现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