C语言之va_list

    va_list 是在C语言中解决变参问题的一组,它是一个指向可变参数的列表的指针。通过它,我们可以遍历和访问传递给函数的可变参数

    va_list 和相关的宏提供了一个机制,使得在函数内部能够处理可变数量的参数,并且可以根据不同的参数类型进行相应的操作和处理。

        va_list的用法
(1)先在函数里定义va_list 型的变量 ,这个变量是指向参数的指针 ,通过指针运算来调整访问的对象;
(2)然后用 va_start 宏初始化变量刚定义的 va_list 变量 ,实际上 就是用 va_list 去指向函数的最后一个具名的参数;                                                                 void va_start(va_list ap, last_arg)
(3)再用 va_arg 宏返回可变的参数,va_arg 的第二个参数是你要返回的参数的类型(如果函数有多个可变参数的,依次调用 va_arg 获取各个参数);         type va_arg(va_list, type)
(4)参数列表访问完以后,要进行回收,否则出现野指针。va_start 与va_end配套一起用。
        int vsnprintf(char *str, size_t size, const char *format, va_list ap);

        参数:str保存输出字符数组存储区。size存储区的大小。format包含格式字符串的C字符串,其格式字符串与printf中的格式相同arg变量参数列表,用va_list 定义。

示例如下:

extern "C"  是 C++ 中的一个关键字组合,用于在 C++ 代码中使用 C 语言风格的函数、变量和其他符号.例如你要在 C++ 代码中使用 C 函数,则需要在使用之前告诉编译器,应该使用 C 风格的命名,而不是 C++ 风格的名称修饰。在函数声明前使用 extern "C" 来实现

        先定义va_list 型的变量,然后用 va_start初始化这个变量,第二个参数要写最后一个有名的参数。这样ap指针就指向了format。 (void)level;用于消除编译器的未使用变量警告

        使用 vsnprintf 函数将可变参数列表中的数据按照指定的格式化字符串 format 填充到 buf 缓冲区中,并返回实际写入 buf 的字符数(不包括终止符 \0

        如果写入成功且字符数小于 buf 的大小,则使用 fprintf 函数将 buf 内容输出到标准错误流 stderr 中

        使用 va_end 宏结束可变参数列表的访问(回收指针,避免野指针)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值