• C++ 中的不定参数与格式化字符串 # ## vsprintf


    日志打印或者格式字符串时,可能会用到不定参数的使用,这里记录一下。
    格式化字符串有很多方法:

    ##是一个连接符号,用于把参数连在一起
    #是“字符串化”的意思,出现在宏定义中的#是把跟在后面的参数转换成一个字符串
    并且# ##都只能出现在宏定义中

    include <stdio.h>
    
    #define test(n) printf("arg" #n " = %d
    ", arg##n) 
    
    int main(){
        int arg9 = 5;
        test(9);    //arg9 = 5
        return 0;
    }
    
    
    • 有时候需要自己调用vsprintf
    #include <stdio.h>                                 
    #include <stdarg.h>
    #include <string>                                  
    
    void format_args(std::string &res, const char* format, ...){
        char buffer[256];                              
        va_list args;                                  
        va_start(args, format);               
        //使用vsnprintf避免buff不足, 出core
        vsnprintf(buffer, sizeof(buffer), format, args);    
        va_end(args);                                  
    
        res = buffer;                                  
    } 
    
    int main(){
        int arg1 = 5;                                  
        std::string arg2 = "OK";                       
        std::string res;                               
    
        format_args(res, "res is arg1 = %d, arg2 = %s", arg1, arg2.c_str()); 
        puts(res.c_str());                             
        return 0;                                      
    } 
    

    写博客发现个markdown的用法, 对标题符合#转: #

  • 相关阅读:
    第八周总结和实验六
    第七周总结与实验五
    遍历目录中的所有文件和目录,并生成全路径
    python watchdog
    Offer_answer_with_SDP_rfc3264
    [转]UML八大误解
    leetcode周赛220
    Codeforces Round #690 (Div. 3)
    学习资料
    鱼眼图与六面图转换(python)
  • 原文地址:https://www.cnblogs.com/xudong-bupt/p/9446736.html
Copyright © 2020-2023  润新知