1、常见的格式
printf("show int: %d, char: %s", int val1, char *val2);
printf(const char *fmt, ...);
2、处理方式
处理过程中主要采用了一个指针va_list
、3个函数 va_start()
、va_arg()
、va_end()
;
va_list args;
//声明args,用于存储了所有的val1,val2,……,实际上是一个指针而已
va_start(args, fmt);
// 得到第一个可变参数的地址,(也就是args的地址是从fmt之后开始,也就是”show int: %d, char: %c”之后)
int getval1 = va_arg(args, int);
// 比如:第一个是int的型,则根据int型获取val1
对fmt字符串进行一个循环操作,如果遇到”%号”,判断并获取数据类型,再通过va_arg()
获取数据;
注:int类型如何获取,通过对fmt字符串的判断,根据第一个”%号”后面的字符来确定 第一个参数的类型
va_end(args);
// 清空args的指针
3、伪代码
printf(const char * fmt, ......)
{
val_list args;
va_start(args, fmt);
char *str;
for(str = buf; *fmt; ++fmt)
{
if (*fmt != '%') {
*str++ = *fmt;
continue;
}
遇到%号后,对%号后面的进行判断, 同时存储于str
switch()
case 'd': va_arg(args, int);
case 's': va_arg(args, char)
case 'p' va_arg(args, void *);
}
va_end(args);
最后str字符串就是printf最后的输出结果
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)