zoukankan      html  css  js  c++  java
  • va_list & vsprintf & vfprint

    vsprintf & vfprintf

    /* 将格式化的参数列表写入C字符串(字符数组) */
    int vsprintf (char * s, const char * format, va_list arg );
    
    /* 将格式化的参数列表写入文件流 (FILE * stdout) */
    int vfprintf ( FILE * stream, const char * format, va_list arg );
    

    sample

    #include <stdargs.h>
    #include <stdio.h>
    
    void LOGD(const char* fmt, ...)
    {
        va_list args;
        va_start(args, fmt);    // 初始化va_list变量,第二个参数为最后一个显示声明的入参
        char str[256] = {''};
        vsprintf(str, fmt, args);
        printf("INFO: %s
    ", str);
        va_end(args);
    }
    
    void logPrint(int level, const char* msg, ...) 
    {
        va_list args;
        va_start(args, msg);
        vfprintf(stdout, msg, args);
        va_end(args);
        fflush(stdout); /* 清空流缓冲区 */
        return;
    }
    
    

    va_list

    va_list实际上就是一个指针,不同平台定义的不一样。

    typedef char *  va_list;  // x86平台下va_list的定义
    

    va_start、va_arg、va_end都是预定义的宏,操作va_list指针:

    va_start(arg, v)    // 以固定参数的地址为起点确定变参的内存起始地址,arg指向第一个可选参数地址
    va_arg(arg, type)   // 返回第一个可选参数的值,类型为type,并将arg指向下一个参数地址
    va_end(arg)         // arg指针置为NULL
    

    函数参数入栈的顺序是从右往左,依次入栈,va_list指针在函数堆栈中移动时,移动多少与前一个参数的类型有关

    vsprintf

    vsprintf将可变参数列表中的数据写入一个C字符串

    int vsprintf (char * s, const char * format, va_list arg );
    // Write formatted data from variable argument list to string
    
  • 相关阅读:
    mui 卡片视图 遮罩蒙版
    mui 滑块开关 进度条 以及如何获取值
    mui 普通新闻文字列表 图文新闻列表
    HDU4553 约会安排
    HDU4614 Vases and Flowers
    HDU 1540 Tunnel Warfare 线段树区间合并
    Codeforces Round #359 (Div. 1)
    POJ3264 Balanced Lineup 线段树区间最大值 最小值
    1351 topcoder 吃点心
    POJ 3321 Apple Tree(dfs序树状数组)
  • 原文地址:https://www.cnblogs.com/cristiano-duan/p/12178101.html
Copyright © 2011-2022 走看看