利用va_list,vfprintf等定义自己的文件输出函数
最近在做项目的时候,经常需要打印日志文件,其实这是最好的调试方式之一,能很好的解释和检验我们的逻辑思维是否正确。为了以后能方便自己在项目中使用打印日志的函数模块,同时也方便大家理解,特意写出比较简单的打印日志的函数(在实际的项目中可以根据自己的需要任意修改),供大家参考,和大家一起进步。
在函数模块中主要用到的知识点是VA_LIST ,VA_LIST 是在C语言中解决变参问题的一组宏,在头文件下。VA_LIST的用法:
(1)首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数的指针
(2)然后用VA_START宏初始化变量刚定义的VA_LIST变量,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数。
(3)然后用VA_ARG返回可变的参数,VA_ARG的第二个参数是你要返回的参数的类型。
(4)最后用VA_END宏结束可变参数的获取。然后你就可以在函数里使用第二个参数了。如果函数有多个可变参数的,依次调用VA_ARG获取各个参数。
同时还用到文件打印输出函数vfprintf,当然,事先应该对文件的操作有一定的理解,不理解的童鞋最好还是看下msdn这个可是好东西,在windows下编程,真的离不开这个东东。
【利用va_list,vfprintf等定义自己的文件输出函数】函数主要实现的功能,是一定的字符串打印输出到文件当中,编译环境是vs2010,具体的代码如下:
// printf_t.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include "stdarg.h"
#include "stdio.h"
#include "stdlib.h"char buffer[256];
void printf_t(FILE *m_file,const char *fmt ...)
{
va_list vp;
va_start(vp,fmt);
//vsprintf(buffer,fmt,vp);
vfprintf(m_file,fmt,vp);
va_end(vp);
fflush(m_file);
}int _tmain(int argc, _TCHAR* argv[])
{
int a = 10;
char *b = "F:\\rer\\print_t.ceshi";
FILE *m_filel;
m_filel = fopen("F:\\rer\\print_t.ceshi","a+");
//printf_t("%d%s\n",a,b);
//printf("%s",buffer);
printf_t(m_filel,"wenjiande weizhi is%d %s\n",a,b);
fclose( m_filel );
return 0;
}
在代码中主要利用fopen打开f盘下的文件,当然,"a+"的标志说明如果文件不存在可以自己创建问价,将a,b字符串打印到指定的文件中,最后将文件句柄关闭。代码实现的方式比较简单,条理比较清晰,在指定的盘符下将会看到指定的文件。
今天立冬了,天气真的有点冷了,祝愿大家每一天能进步一点,每一天能快快乐乐,一天比一天幸福。转载的话请注明出处哟!!!
推荐阅读
- Quartz|Quartz 源码解析(四) —— QuartzScheduler和Listener事件监听
- Flutter的ListView
- Spring|Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件
- 1.2序列通用操作
- 【万伽复利】什么是复利(如何利用复利赚钱?)
- Java应该在哪里判断List是否为空
- 苹果手机如何利用库乐队自制铃声
- grep|grep 时 Argument list too long
- vue.js|vue.js window.removeEventListener 移除
- “没有利用价值的人是很受冷遇的。”