sprintf函数如何封装调用?主要是参数不知道怎么写。。
RT,请高手指点一二
[解决办法]
#include <stdarg.h>
[解决办法]
#include <stdio.h>#include <windows.h>//Log{#define MAXLOGSIZE 10000000#define ARRSIZE(x) (sizeof(x)/sizeof(x[0]))#include <io.h>#include <time.h>#include <stdarg.h>char logfilename1[]="MyLog1.log";char logfilename2[]="MyLog2.log";char logstr[16000];char datestr[40];char timestr[40];CRITICAL_SECTION logsec;FILE *logf;void LogV(LPCTSTR pszFmt, va_list argp){ if (pszFmt==NULL||pszFmt[0]==0) return; if (_vsnprintf(logstr, ARRSIZE(logstr), pszFmt, argp) == -1) logstr[ARRSIZE(logstr) - 1] = 0; _strdate(datestr);//mm/dd/yy datestr[2]=0;datestr[5]=0;sprintf(datestr+10,"%s-%s-%s",datestr+6,datestr+0,datestr+3);//yy-mm-dd _strtime(timestr);//hh:mm:ss// timestr[2]=0;timestr[5]=0;sprintf(timestr,"%s%s%s",timestr+0,timestr+3,timestr+6);//hhmmss printf("%s %s %s",datestr+10,timestr,logstr); logf=fopen(logfilename1,"a"); if (logf!=NULL) { if (_filelength(_fileno(logf))>MAXLOGSIZE) { fclose(logf); if (rename(logfilename1,logfilename2)) { remove(logfilename2); rename(logfilename1,logfilename2); } logf=fopen(logfilename1,"a"); if (logf==NULL) return; } fprintf(logf,"%s %s %s",datestr+10,timestr,logstr); fclose(logf); }}void Log(LPCTSTR pszFmt, ...){ va_list argp; EnterCriticalSection(&logsec); va_start(argp, pszFmt); LogV(pszFmt, argp); va_end(argp); LeaveCriticalSection(&logsec);}//Log}int main(int argc,char * argv[]){ InitializeCriticalSection(&logsec); Log("This is a Log from FILE:%s LINE:%d\n", __FILE__, __LINE__); DeleteCriticalSection(&logsec); return 0;}
[解决办法]
对sprintf封装比较难
不过可以封装另一个函数vsprintf
void ssprintf (char *, const char *, ...)
{
vsprintf(char *, /*具体调用参数查看vsprintf说明*/);
}