利用va_list,vfprintf等定义自己的文件输出函数

最近在做项目的时候,经常需要打印日志文件,其实这是最好的调试方式之一,能很好的解释和检验我们的逻辑思维是否正确。为了以后能方便自己在项目中使用打印日志的函数模块,同时也方便大家理解,特意写出比较简单的打印日志的函数(在实际的项目中可以根据自己的需要任意修改),供大家参考,和大家一起进步。

在函数模块中主要用到的知识点是VA_LIST ,VA_LIST 是在C语言中解决变参问题的一组宏,在<stdarg.h>头文件下。VA_LIST的用法:      
      (1)首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数的指针
      (2)然后用VA_START宏初始化变量刚定义的VA_LIST变量,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数。
      (3)然后用VA_ARG返回可变的参数,VA_ARG的第二个参数是你要返回的参数的类型。
      (4)最后用VA_END宏结束可变参数的获取。然后你就可以在函数里使用第二个参数了。如果函数有多个可变参数的,依次调用VA_ARG获取各个参数。

同时还用到文件打印输出函数vfprintf,当然,事先应该对文件的操作有一定的理解,不理解的童鞋最好还是看下msdn这个可是好东西,在windows下编程,真的离不开这个东东。

函数主要实现的功能,是一定的字符串打印输出到文件当中,编译环境是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字符串打印到指定的文件中,最后将文件句柄关闭。代码实现的方式比较简单,条理比较清晰,在指定的盘符下将会看到指定的文件。

今天立冬了吐舌头,天气真的有点冷了,祝愿大家每一天能进步一点,每一天能快快乐乐,一天比一天幸福。转载的话请注明出处哟!!!




你可能感兴趣的:(利用va_list,vfprintf等定义自己的文件输出函数)