va_list를 다른 함수로 전달하고 싶습니다.어떻게 C90에서 함수를 통해 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);
}
당신의 컴파일러 + 헤더는'va_list'를'char *'로 정의 할 수도 있지만 구현에 따라 다릅니다. 당신은'va_list '를'va_start','va_arg','va_copy','va_end'로만 조작 할 수 있습니다. C99 표준 7.15. – PJTraill