关于可变形参的问题,请求解决.
请问,我有下面两个方法.都是使用可变形参的.但是不能出现预期的结果.请哪位达人指点一下.
int writeError(PLOGGER log ,PUCHAR pmethod ,PUCHAR * err ,...)
{
int ref = -1;
va_listvaList;
va_start(vaList, err); //调试中没有出现预期的值
ref = _filewrite(log, LOG_ERRTEXT, pmethod, err ,vaList );
va_end(vaList);
return ref;
}
static int _filewrite(PLOGGER log,PUCHAR type, PUCHAR pmethod ,PUCHAR info, va_list vaList)
{
int ref = -1;
UCHAR buff[1024];
UCHAR format[512];
DATE tme= time(NULL);
struct tm *t=localtime(&tme);
if(log-> fid == NULL || log-> mutex == NULL)
{
return -1;
}
sprintf(format, "%s, %04d-%02d-%02d %02d:%02d:%02d, %s, %s\r\n ",
type ,
t-> tm_year+1900,
t-> tm_mon+1,
t-> tm_mday,
t-> tm_hour,
t-> tm_min,
t-> tm_sec,
pmethod,
info);
sprintf(buff,format,vaList);
lock(log-> mutex);
if(dateCompare(tme, log-> lastDate) > LOG_CHECKTIME)
{
if(changeFile(log))
{
return -1;
}
}
ref = write(log-> fid-> _file,buff,strlen(buff));
unlock(log-> mutex);
return ref;
}
//调用
... ....
//文件中出现:[error], 2007-04-02 15:14:47, aabsnc, this is test,1244972
writeError(log, "aabsnc ", "this is test,%d ",1);
//文件中出现:[error], 2007-04-02 15:14:47, XXXXX, this is test,h@B
writeError(log, "XXXXX ", "this is test,%s ", "aa ");
[解决办法]
sprintf(buff,format,vaList);
应该用vsprintf
[解决办法]
vsprintf
[解决办法]
vsprintf 是一点 ~~
va_start(vaList, err); //调试中没有出现预期的值
这个是什么意思?
先不要调用 _filewrite函数,
就循环获得 可变参数列表, 输出这些参数看看是否正确 ~