Как запустить функцию для каждого аргумента в списке varargs в C - PullRequest
0 голосов
/ 18 сентября 2010

Я хочу вызвать mysql_real_escape для каждого аргумента списка vararg, прежде чем он затем будет передан в vsprintf для включения в строку SQL. Есть ли способ сделать это легко? Кажется, я пропустил подготовленные заявления, но в любом случае это кажется полезным.

1 Ответ

3 голосов
/ 18 сентября 2010

Вызовите va_start()va_end()) дважды.

Первый раз в цикле с va_arg() внутри для проверки (и изменения) каждого аргумента;
и следующий раз для vsprintf

/* check args */
va_start(val, parm);
while (MORE_ARGUMENTS) {
    arg = va_arg(val, char*);
    /* mysql_real_escape(arg); */
}
va_end(val);

/* print */
va_start(val, parm);
vsprintf(buf, FORMAT_STRING, val);
va_end(val);
...