文章转载自: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, "\r\n");
 dwSize += 2;
 //记录函数
}
 

自定义printf 打印函数的更多相关文章

  1. stm32_f103使用gcc编译的环境下printf打印函数的实现

    前记   gcc编译使用的printf打印函数需要的底层函数是和其他编译器不同的,以前的是无法使用的,这里有两种方法,一种是使用gcc库里面的printf函数,自己实现底层IO函数_write.另外一 ...

  2. Objective-C与Swift下的自定义打印函数(Debug和Release)

    1.Objective-C 在使用Objective-C进行开发的过程中,为了Debug会不断的设置打印函数.如下图是我们经常用的,用来测试监听方法的实现与否: NSLog(@"%s&quo ...

  3. 嵌入式操作系统---打印函数(printf/sprintf)的实现

    一.打印函数简介 作用:将“给定的内容”按照“指定的格式”输出到“指定目标内”. 打印函数的基本格式: char print_buf[BUF_SIZE]; void printf(const char ...

  4. .net开发---自定义页面打印区域

    自定义页面打印区域 有3种办法: 办法一:将不需要打印的部位隐藏掉 Examp: <%-- (1)使用css样式,定义一个.noprint的class,将不打印的内容放入这个class内. -- ...

  5. C程序中引用自定义的C函数模块

    原文:C程序中引用自定义的C函数模块 我们知道,刚开始接触C语言编程,一般都是在一个.c或者.cpp(以下只说.c)的文件中编写代码,其中一定会有一个入口函数, 也就是main()函数,你可以将程序代 ...

  6. 小程序重新封装打印函数console.log

    习惯性使用console.log打印获取到的数据,信息等,然后上星期大佬看见了说怎么那么多打印信息出来,线上那个也是吗?问我能不能线上的就不打印出来? 我就说那就封装一个打印函数呗. 重写一个没问题, ...

  7. yii学习笔记(3),自定义全局工具函数

    在平时开发是经常需要打印数据来调试 常见的打印方式有print_r和var_dump,但是这样打印出来格式很乱不好浏览 在打印函数前后加上<pre></pre>就可以将内容原样 ...

  8. 自定义JS Map 函数

    // 自定义JS Map 函数 function Map() { var map = function (key, value) {//键值对 this.key = key; this.value = ...

  9. Visual Studio C++ MFC界面常用参数更改(改变图标,添加控件,调试打印函数等等)

    背景 需要使用Visual Studio C++做一些界面.此篇文章既是记录Visual Studio C++在调整界面时常常遇见的问题. 正文 一.如何更改窗体图标,以及生成的.exe图标 更改窗体 ...

随机推荐

  1. vmware安装centos7.5、配置网卡、环境配置

    1.vmware安装centos7.5虚拟机    参考连接: https://blog.csdn.net/guo_ridgepole/article/details/78973763 可能遇到的问题 ...

  2. Python3之错误处理

    在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及错误的原因.在操作系统提供的调用中,返回错误码非常常见.比如打开文件的函数open(),成功时返回文件描 ...

  3. 如何实现批量截取整个网页完整长截图,批量将网页保存成图片web2pic/webshot/screencapture/html2picture

    如何实现批量截取整个网页完整长截图,批量将网页保存成图片web2pic/webshot/screencapture [困扰?疑问?]: 您是否正受到:如何将网页保存为图片的困扰?网页很高很长截图截不全 ...

  4. VLOOKUP函数 from Excel

    1.VLOOKUP函数是Excel中的一个纵向查找函数,它与LOOKUP函数和HLOOKUP函数属于一类函数,在工作中都有广泛应用,例如可以用来核对数据,多个表格之间快速导入数据等函数功能.功能是按列 ...

  5. vue-cli2.0项目的搭建

    1.第一步:安装vue-cli 命令行输入cmd或按住shift鼠标右键打开powershell 输入命令 npm install --global vue-cli 按enter键 2.第二步:创建项 ...

  6. linux SSH 登录

    1:  远程连接linux server:       ssh -p22 root@192.168.XXX.XXX 然后输入密码. 2: 免密码的方式: A: sudo -i B: ssh-keyge ...

  7. easyui中combobox下拉内容进行分组

    需求:对combobox下拉内容进行分组. 效果样式: 代码: valueField:'paymethod_name', textField:'paymethod_name', data:[{ &qu ...

  8. shell 批量重命名

    原文链接https://www.cnblogs.com/sunmmi/articles/6709125.html shell 批量重命名   1.把文件名的第一字母批量改成a 方法一: 1 2 3 4 ...

  9. FZU2018级算法第二次作业 2.10 逆序数(权值线段树)

    题目: Nk 最近喜欢上了研究逆序数,给出一个由 1…n 组成的数列 a1,a2,a3…an, a1的逆序数就是在 a2…an 中,比 a1 小的数的数量,而 a2 的逆序数就是 a3….an 中比 ...

  10. 使用不同代理IP刷票的脚本---requests

    投票功能限制刷票是通过限制单个IP的投票次数实现的,所以写了个脚本用于测试此功能. #-*- coding=utf-8 -*- ''' 功能:此脚本用于用不同的IP刷票 作者:Elle 最后修改日期: ...