void royLog(const char*string, ...)
{
FILE* fp = NULL;
// 打开文件,如果没有的话,那么就创建该文件
fp = fopen("log.txt","a+");
// 进行有效性判断
if (NULL == fp)
{
printf("opening file fails! ");
return;
}
va_list list;
va_start(list,string);
// 申请内存
int len = strlen(string);
char* temp = (char*)malloc(sizeof(char)*(len));
// 判断分配内存是否有效
if (NULL == temp)
{
printf("allocation fails!");
return;
}
//初始化内存
memset(temp,0,len);
// 执行拷贝
memcpy(temp,string,len);
int result = vfprintf(fp,temp,list);
// 释放内存和将指针置为为空
free(temp);
temp = NULL;
va_end(list);
//关闭文件指针
fclose(fp);
fp = NULL;
}
感觉公司里面的log不怎么好用,直接用OutputDebugString到输出窗口怎么能跟我的这个log做法相比较呢?呵呵
呵呵.感觉很羞耻的是上面的log文件存在严重问题.
特别是vfprintf. int vfprintf( FILE *stream, const char *format, va_list argptr );
而我在上面的log里面是将log信息传递给format的,这样就存在严重的问题,不过感觉离奇的是,我在之前的测试中居然没有报错,在我将log添加到游戏工程里面以后就却报错了.(代码还是要进行路径覆盖的,不能光看功能或者做一些黑盒测试,只看输入和输出,而忽视了正确的功能).
正确的文件log要更加简单些:
FILE* fp = NULL;
// 打开文件,如果没有的话,那么就创建该文件
fp = fopen("file.txt","a+");
// 进行有效性判断
if (NULL == fp)
{
printf("opening file fails! ");
return;
}
va_list list;
va_start(list,format);
vfprintf(fp,format,list);
va_end(list);
//关闭文件指针
fclose(fp);
fp = NULL;
请大家如果发现bug的话,一定要告诉我,我一定请他吃饭,呵呵.