C语言可变参数函数怎么写?

这里的可变参数指的是参数的个数和类型不确定,

比如我们熟悉的printf,原型是int printf(const char *format, ...);

那么我们自己怎么实现呢?比如我写个函数名叫foo,参考printf写成如下格式,

void foo(const char *fmt,...)
{

}

然后我们需要使用stdarg.h这个头文件里的va_start,va_end这两个宏

我们写成这样


void foo(const char *fmt,...)
{
    va_list ap;
    va_start(ap,fmt);
    va_end(ap);
}

va_start目的是用fmt来初始化ap。往后对可变参数的挨个获取,可以使用宏va_arg对ap进行操作来实现。

如果我们不想一个一个获取,就想获取可变参数拼接成的字符串,如printf输出到标准输出的结果那样。

那么我们需要借助vsnprintf这个函数,定义在stdio.h里。

我们写成这样


void foo(const char *fmt,...)
{
    va_list ap;
    va_start(ap,fmt);
    char string[128] = {0};
    vsnprintf(string,strlen(string)-1,fmt,ap);
    va_end(ap);
    printf("%s",string);
}

可变参数的用法就是这么的简单,快来试试吧。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值