我有一个带有可变数量参数的模块:
int myprintf( const char *format, ... ){
}
我想声明一个本地char数组,将“myprint”参数传递给sprintf(),以便sprintf()将参数转换为字符数组然后我可以对该字符数组执行某些操作。 通过这样做,我不必重新发明sprintf的内部。
理论上:
int myprintf( const char *format, ... )
{
char buf[ 512 ];
sprintf( buf, format, ... );
// now do something with buf
}
我确信va_start( a, b)
,va_arg( c, d )
会与之有关;但是va_arg似乎需要解析原始参数列表。
有什么建议吗?
答案 0 :(得分:2)
详细说明克里斯所说的话,如:
int vmyprintf(const char* format, va_list args)
{
char buf[512];
vsnprintf(buf, sizeof(buf), fmt, args);
// now do something with buf
}
int myprintf(const char *format, ...)
{
va_list args;
int ret;
va_start(args, format);
ret = vmyprintf(format, args);
va_end(args);
return ret;
}
答案 1 :(得分:1)
你可能正在寻找类似的东西:
void myprintf( const char *format, ... )
{
char buf[ 512 ];
va_list vl;
va_start (vl, format);
vsnprintf(buf, 511, format, vl);
va_end(vl);
// now do something with buf
}
Some other information is available in my answer here
当然上面的答案会留下许多问题,例如我们将如何处理缓冲区溢出等问题。但这是另一个故事。