如@psxf91所答,应使用v*系列的函数来实现。对比下printf与vprintf函数原型:
void printf(const char *format, ...);
void vprintf(const char *format, va_list ap);
可以看出二者的差别。vprintf才接收va_list类型,printf接收的是不定参数。
因此,要实现你的要求代码如下:
#include "stdarg.h"
void fun(const char *fmt, ...){
va_list ap;
va_start(ap, fmt);
// ...
vprintf(fmt, ap);
// ...
va_end(ap);
}
我记得有个函数叫vprintf,
用stdarg.h的宏把va_list拿到
然后传进去,即可。
找到printf的原型,根据这个实现,一般可变参数用的比较少,能不实现就不要实现,以防以后遇到问题.解决起来麻烦!
你可以用字符指针作为函数的参数,自己在函数里面设计一个格式去读这个指针指向的一串字符。
比如printf
,scanf
函数就是这样的。函数参数就有字符指针。
例如printf("the
data
is
%d",x);
字符串"the
data
is
%d"的首地址给了字符指针。