码迷,mamicode.com
首页 > 其他好文 > 详细

创建函数利用可变参数列表的形式模拟实现printf的功能

时间:2015-11-11 06:39:14      阅读:209      评论:0      收藏:0      [点我收藏+]

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

标签:创建函数利用可变参数列表的形式模拟实现printf的功能

原文地址:http://10738469.blog.51cto.com/10728469/1711585

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!