zoukankan      html  css  js  c++  java
  • 自定义printf 打印函数

    文章转载自:https://blog.csdn.net/varding/article/details/8109440
     
    我们在程序里经常需要打印一些字符串来调试或者显示,最简单的方法:

    char buff[1024];
    sprintf(buff,"%d,%s",i,str);

    这样每次都要定义一个buff很麻烦,很容易冲突。于是我们就想到用一个自定义的函数专门格式化这些数据,那么最简单的方法就是用可变参数,简单的列子如下:

    //定义
    void MyPrint(const char *fmt, ...)
    {
     char buff[4096];
     
     va_list args;
     va_start(args, fmt);
     wvsprintf(buff, fmt, args);
     va_end(args);
     
     //buff就是数据了,可以根据需要在这儿保存或者显示
    }
    //使用方法
    MyPrint("%d,%s",i,str);

    上面的函数可以将字符串格式化后做统一处理比较方便,如果格式化字符串后用途不同还需要做一些修改:
    我们可以对此做一些修改:

    //定义
    char* MyPrint(const char *fmt, ...)
    {
     static char buff[4096];
     
     va_list args;
     va_start(args, fmt);
     wvsprintf(buff, fmt, args);
     va_end(args);
     
     return buff;
     //buff就是数据了
    }
    //使用
    SetDlgItem(IDC_BUTTON1,MyPrint("%d,%s",i,str));
    MessageBox(MyPrint("%d,%s",i,str));

    因为这儿用了static数组保存格式化后的字符串,因此在下次使用MyPrint的时候确保上次的结果已经不再需要了
    下面是添加了时间信息的log记录函数:

    void WriteLog(const char *fmt, ...)
    {
     SYSTEMTIME sysTime;
     GetLocalTime(&sysTime);
     
     char szBuffer[4096];
     DWORD dwSize = wsprintf(szBuffer, "[%02d:%02d:%02d] ", sysTime.wHour, sysTime.wMinute, sysTime.wSecond);
     
     va_list args;
     va_start(args, fmt);
     dwSize += wvsprintf(szBuffer + dwSize, fmt, args);
     va_end(args);
     
     lstrcpy(szBuffer + dwSize, " ");
     dwSize += 2;
     //记录函数
    }
     
  • 相关阅读:
    阿里巴巴开源的Asynchronous I/O Design and Implementation
    maven 出现错误 -source 1.5 中不支持 diamond 运算符
    Kafka设计解析(六)- Kafka高性能架构之道
    Kafka设计解析(七)- Kafka Stream
    flink如何动态支持依赖jar包提交
    Hbase技术笔记
    windows环境:idea或者eclipse指定用户名操作hadoop集群
    HBase源码实战:BufferedMutator
    HBase工具:如何查看HBase的HFile
    HBase源码实战:CreateRandomStoreFile
  • 原文地址:https://www.cnblogs.com/yeshenmeng/p/11776808.html
Copyright © 2011-2022 走看看