项目开发中,经常会用到打印日志,程序员也有自己的一套常用打印日志的方法,而我在写自己的日志打印代码的时候,发现了如题的错误。
先来看看我写的代码吧。
#include <stdio.h>
#include <windows.h>
#include <tchar.h>
const TCHAR *strLogfName = _T(".\\ServiceLogf.txt");
const TCHAR *strLogvName = _T(".\\ServiceLogv.txt");
void WriteLogf(const TCHAR *lpFmt, ...)
{
TCHAR lpFmts[2048] = {0};
SYSTEMTIME systemTime;
GetLocalTime(&systemTime);
FILE *pfile = fopen(strLogfName, "w");
fprintf(pfile, "%d-%d-%d %d:%d:%d ", systemTime.wYear, systemTime.wMonth, systemTime.wDay, systemTime.wHour, systemTime.wMinute, systemTime.wSecond);
va_list arglist;
va_start(arglist, lpFmt);
sprintf_s(lpFmts, 2047, lpFmt, arglist);//lpFmts出现乱码
va_end(arglist);
fprintf(pfile, lpFmts);
fclose(pfile);
}
void WriteLogv(const TCHAR *lpFmt, ...)
{
TCHAR lpFmts[2048] = {0};
SYSTEMTIME systemTime;
GetLocalTime(&systemTime);
FILE *pfile = fopen(strLogvName, "w");
fprintf(pfile, "%d-%d-%d %d:%d:%d ", systemTime.wYear, systemTime.wMonth, systemTime.wDay, systemTime.wHour, systemTime.wMinute, systemTime.wSecond);
va_list arglist;
va_start(arglist, lpFmt);
_vsnprintf(lpFmts, 2047, lpFmt, arglist);//lpFmts没有出现乱码
va_end(arglist);
fprintf(pfile, lpFmts);
fclose(pfile);
}
int main()
{
WriteLogf("test%d%s\n", 10, "中文测试");
WriteLogv("test%d%s\n", 10, "中文测试");
return 0;
}
输出的日志分别是
2016-4-12 17:41:0 test10中文测试
2016-4-12 17:46:8 test1637980@^~
在网上查了很多资料,也查了MSDN,还是没有找到合理的解答,望各位大神指点指点。