Вы можете использовать функции стиля vsprintf для печати в формате printf для параметра переменной длины. Однако для этого не требуется. Вы можете, если вы решите написать свою функцию, чтобы продолжать принимать параметры, пока не встретит нулевой указатель.
va_list ap;
char *param;
va_start(ap,fmt);
param = va_arg(ap,char*);
while(param)
{
do something...
param = va_arg(ap,char*);
}
или вы можете иметь несколько параметров, как первые пары вашей функции
void my_printf(int param_num,...)
{
va_list ap;
char *param;
va_start(ap,fmt);
while(param_num)
{
do something...
param = va_arg(ap,char*);
param_num--;
}
}
его действительно до вас, возможности безграничны. Я думаю, что единственным реальным требованием к эллипсам является то, что он имеет по крайней мере один параметр перед эллипсами.
Как вы узнаете, что буфер достаточно большой? И вы действительно должны вернуть количество конверсий, выполняемых sprintf(), иначе пользователи не смогут узнать, какая функция работала. – 2010-03-10 22:23:20
Я разделил все, что не было существенным для иллюстрации моей точки. Очевидно, что в моем коде выпуска я более подробно :) – Mike