首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

sprintf函数怎么封装调用?主要是参数不知道如何写。

2012-03-28 
sprintf函数如何封装调用?主要是参数不知道怎么写。。RT,请高手指点一二[解决办法]#include stdarg.h[解决

sprintf函数如何封装调用?主要是参数不知道怎么写。。
RT,请高手指点一二

[解决办法]
#include <stdarg.h>
[解决办法]

探讨
我就是突然想到的这样的问题,sprintf这样的函数的参数传递方式跟普通函数不一样,不进行参数检测的,如何实现的??

[解决办法]
参考这个
C/C++ code
#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说明*/);
}

热点排行