处理变长参数的利器——valist

处理变长参数的利器——valist1 valist 简介 C 语言标准库中头文件 stdarg h 声明了一组能够变长参数的宏 主要有 1 va list 用来声明一个表示参数表中各个参数的变量 2 va start 初始化一个指针来指向变长参数列表的头一个变量 注意 只能出现在参数表的最后 3 va arg 每次调用时都会返回当前指针指向的变量 并将指针挪至下一个位置 参数的类型需要在这个调用的第二个参数来指定 va

1. valist 简介

C语言标准库中头文件stdarg.h声明了一组能够变长参数的宏。主要有:

2. example

int LOG(int level, const char *fmt, ...) { int ret = 0; char logStr[4096]; va_list ap; va_start(ap, fmt); memset(logStr, 0, sizeof(logStr)); vsnprintf(logStr, sizeof(logStr), fmt, ap); va_end(ap); fprintf(stderr, "%s\n", logStr); return ret; };

3. 神奇的 vsnprintf函数

int snprintf(char *str, size_t size, const char *format, ...)

4. V字头函数与普通青年对比

#include 
    int printf(const char *format, ...); //输出到标准输出 int fprintf(FILE *stream, const char *format, ...); //输出到文件 int sprintf(char *str, const char *format, ...); //输出到字符串str中 int snprintf(char *str, size_t size, const char *format, ...); //按size大小输出到字符串str中 以下函数功能与上面的一一对应相同,只是在函数调用时,把上面的...对应的一个个变量用va_list调用所替代。在函数调用前ap要通过va_start()宏来动态获取。 #include 
    int vprintf(const char *format, va_list ap); int vfprintf(FILE *stream, const char *format, va_list ap); int vsprintf(char *str, const char *format, va_list ap); int vsnprintf(char *str, size_t size, const char *format, va_list ap);
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/211219.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午10:56
下一篇 2026年3月18日 下午10:56


相关推荐

  • JavaScript 数组排序【六大方法】「建议收藏」

    JavaScript 数组排序【六大方法】「建议收藏」文章目录数组排序sort()方法冒泡排序选择排序插入排序快速排序希尔排序数组排序排序,就是把一个乱序的数组,通过我们的处理,让他变成一个有序的数组1.sort()方法sort()数组对象排序其原理是冒泡排序reverse()方法能够颠倒数组元素的排列顺序例如:vararr=[3,1,5,6,4,9,7,2,8];varasc=arr.sort()console.log(asc); //1,2,3,4,5,6,7,8,9vardesc=asc.

    2022年6月12日
    33
  • Pycharm代码设置自动换行[通俗易懂]

    Pycharm代码设置自动换行[通俗易懂]一、当前文件设置自动换行在菜单栏找到View导航一次View->ActiveEditor->UseSoftWraps。点击UseSoftWraps即可。二、统一设置自动换行–所有文件代码都自动换行1、点击File,选择Settings2、点击Editor展开菜单3、找到General菜单并选中,勾选Usesoftwrapsineditor…

    2022年8月27日
    74
  • python无限锁屏「建议收藏」

    python无限锁屏「建议收藏」无限锁屏fromctypesimport*#可以利用python去调用dll动态库的包可以与c混编importtime#无限锁屏,利用python死循环deflock_windows(): whileTrue: #调用系统底层api,载入依赖库,系统运行时所需要的核心代码 user32=windll.LoadLibrary(‘user32.dll’…

    2022年7月21日
    15
  • redis集群搭建(非常详细,适合新手)_redis集群模式

    redis集群搭建(非常详细,适合新手)_redis集群模式一、基本环境首先我们需要使用VMware配置几个虚拟机,我们需要安装VMWare然后下载自己的linux镜像文件,在虚拟机上安装linux系统,vm15和centos7下载传送门提取码:lvb5。我使用的是centos764,大致步骤可以根据其他博客将第一台虚机的系统安装成功,然后直接clone这台机器就可以了,然后需要修改ip。二、准备相关软件安装包…

    2022年10月15日
    5
  • mqttnet 详解_mqttnet3.0用法

    mqttnet 详解_mqttnet3.0用法1///开源库地址:https://github.com/chkr1011/MQTTnet2///对应文档:https://github.com/chkr1011/MQTTnet/wiki/Client34usingMQTTnet;5usingMQTTnet.Client;6usingMQTTnet.Client.Options;7usingSystem;8usingSystem.T…

    2022年6月25日
    53
  • warning用法_docker个人应用

    warning用法_docker个人应用docker本地化异常:/bin/sh: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)

    2022年4月22日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号