Я хочу передать va_list в другую функцию.Вот пример того, что я пытаюсь сделать:
void my_printf_1(char* string, ...){
va_list ap;
va_start (ap, string);
printf(string, ap);
va_end(ap);
}
void my_printf_2(char* string, ...){
va_list ap;
va_start (ap, string);
printf(string, *ap);
va_end(ap);
}
void main(void){
my_printf_1("Hello %i\n", 12); //Shows me the Pointer
my_printf_1("Hello \n"); //Runtime Error - too Many Arguments
my_printf_2("Hello %i\n", 12); //Displays correctly because 12 < char
my_printf_2("Hello %i\n", 500); //Displays incorrectly because 500 > char
my_printf_2("Hello %i %i\n", 12, 12); //Displays 12, then crashes Runtime Error not enough arguments
my_printf_2("Hello \n"); //Runtime Error - too Many Arguments
}
Мне кажется, что мой va_list ap
является указателем char
, как я могу получить весь список?Как я могу переписать my_printf()
, чтобы передать целое или фальшивое va_list
подфункциям?Я не могу изменить свои подфункции так, чтобы они принимали va_list
указатели, поэтому мне придется изменить my_printf
.
РЕДАКТИРОВАТЬ: я понимаю, что следующее будет работать, но это не то, что я хочу.
void my_printf_1(char* string, ...){
va_list ap;
va_start (ap, string);
vprintf(string, ap);
va_end(ap);
}