concentrate on c/c++ related technology

plan,refactor,daily-build, self-discipline,

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  37 Posts :: 1 Stories :: 12 Comments :: 0 Trackbacks

常用链接

留言簿(9)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

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的话,一定要告诉我,我一定请他吃饭,呵呵.

posted on 2008-06-03 20:48 jolley 阅读(269) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理