• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Переменное число параметров

  • Автор темы Автор темы Rumzy
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
R

Rumzy

Привет!

Столкунулся со следующей проблеммой. Для функции с переменным числом параметров нужно написать wrapper.
Код:
int func(int i, char* format, ...);

int wrapper_func(int i, char* format, ...)
{
// do something

return func(i, format, ...); // ??
}

Как передать переменное число параметров в "оборачиваемую" функцию?

ЗЫ i - просто переменная типа int. Это не количество параметров.
 
Никак. Либо передаешь адрес либо число и копируешь.
 
Задача состоит как-раз в том, чтоб не менять интерфейс базовой функции. Но похоже общий случай таки невозможно решить с помощью средств С/С++.
 
Для обработки переменного числа параметров используются макросы:
va_alist - Name of parameter to called function (UNIX version only)
va_arg - Macro to retrieve current argument
va_dcl - Declaration of va_alist (UNIX version only)
va_end - Macro to reset arg_ptr
va_list - typedef for pointer to list of arguments defined in STDIO.H
va_start - Macro to set arg_ptr to beginning of list of optional arguments (UNIX version only)
Но как решить твою задачу сходу я и не соображу
 
Нет, всетаки можно - через глобальную переменную

Даже еще вот способ - у тебя же переменное число аргументов, вот и передавай в них адрес, а функция будет интерпретировать один из аргументов как адрес в зависимости от различных критериев которые можно придумать целую кучу.
 
Normann, насколько я понял условие, функция func должна остаться неизменна, тогда ни глобальные переменные, ни передача адреса положение не изменят..


Rumzy, надеюсь func это не printf?
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab