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的話,一定要告訴我,我一定請他吃飯,呵呵.