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);
}
int 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);
}