Я пытаюсь обернуть printf в программу на C (ну, на самом деле _snprintf, но этот пример проще), и у меня возникли проблемы с работой переменных аргументов. Вот мой код:
#include <stdio.h>
#include <stdarg.h>
void works(void)
{
printf("%d\n", 100);
}
void wrap_printf(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
printf(fmt, args);
va_end(args);
}
void broken(void)
{
wrap_printf("%d\n", 100);
}
int main(void)
{
works();
broken();
return 0;
}
Вот мой вывод:
100
3668388
Переменная args выглядит хорошо после вызова va_start
в моем коде, но как только я перехожу к коду среды выполнения C, они вызывают va_start
значение выглядит неправильно. Есть мысли, что я могу делать не так?