[C/C++] 가변 개수의 매개 변수 값 입력 받기

개발 노트 2009. 1. 5. 15:40 posted by 무병장수권력자


작성자 : 김문규
최초 작성일 : 2009. 1. 5

매우 허접한 소스코드이지만 실제로 사용법을 아는데는 전혀 문제가 없기에 그냥 올립니다.

3가지 api가 존재합니다.
 - va_start 로 변수 초기화
 - va_arg 로 변수 획득
 - va_end 로 변수 해제

#include <stdio.h>
#include <stdarg.h>

int function(const char* format, ...)
{
    va_list p_arg;
    printf("%s\n", format);
    va_start(p_arg, format);
    printf("%s\n", va_arg(p_arg, char*));
    printf("%s\n", va_arg(p_arg, char*));
    printf("%s\n", va_arg(p_arg, char*));
    printf("%s\n", va_arg(p_arg, char*));
    va_end(p_arg);
    return 0;
}
int main()
{
    function("%s", "kim", "moon", "kyu");
    return 0;
}

결과를 볼까요?
va_arg가 범위가 넘어가니깐 엉뚱한 곳을 가리킨다는 점에 주목하시기만 하면 됩니다.

그래서 대부분은 첫번째 인자를 예제 처럼 format으로 정의해서 형과 개수를 알아낸 후 이에 맞추어서 사용해야 합니다. (printf의 format을 사용하시는 것도 좋은 방법이 아닐까요? 이 부분은 실제 개발 시 적절하게 만들어서 사용하세요.)

[root@localhost Programming]# ./a.out
%s
kim
moon
kyu
U‰åWVSèPy