작성자 : 김문규
최초 작성일 : 2009. 1. 5
매우 허접한 소스코드이지만 실제로 사용법을 아는데는 전혀 문제가 없기에 그냥 올립니다.
3가지 api가 존재합니다.
- va_start 로 변수 초기화
- va_arg 로 변수 획득
- va_end 로 변수 해제
int function(const char* format, ...)
{
va_list p_arg;
결과를 볼까요?
va_arg가 범위가 넘어가니깐 엉뚱한 곳을 가리킨다는 점에 주목하시기만 하면 됩니다.
그래서 대부분은 첫번째 인자를 예제 처럼 format으로 정의해서 형과 개수를 알아낸 후 이에 맞추어서 사용해야 합니다. (printf의 format을 사용하시는 것도 좋은 방법이 아닐까요? 이 부분은 실제 개발 시 적절하게 만들어서 사용하세요.)
최초 작성일 : 2009. 1. 5
매우 허접한 소스코드이지만 실제로 사용법을 아는데는 전혀 문제가 없기에 그냥 올립니다.
3가지 api가 존재합니다.
- va_start 로 변수 초기화
- va_arg 로 변수 획득
- va_end 로 변수 해제
#include <stdio.h>
#include <stdarg.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*));
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;
}
{
function("%s", "kim", "moon", "kyu");
return 0;
}
결과를 볼까요?
va_arg가 범위가 넘어가니깐 엉뚱한 곳을 가리킨다는 점에 주목하시기만 하면 됩니다.
그래서 대부분은 첫번째 인자를 예제 처럼 format으로 정의해서 형과 개수를 알아낸 후 이에 맞추어서 사용해야 합니다. (printf의 format을 사용하시는 것도 좋은 방법이 아닐까요? 이 부분은 실제 개발 시 적절하게 만들어서 사용하세요.)
[root@localhost Programming]# ./a.out
%s
kim
moon
kyu
U‰åWVSèPy
%s
kim
moon
kyu
U‰åWVSèPy
'개발 노트' 카테고리의 다른 글
[C/C++] C++에서 사용하는 casting 연산자 (3) | 2009.01.05 |
---|---|
[C/C++] expression1 ? expression2 : expression3; (0) | 2009.01.05 |
[C/C++] base64 인코딩과 디코딩 구현 (10) | 2008.12.18 |
[Unix] VI에서 ^M 넌 누구냐? (0) | 2008.12.04 |
[Unix] find 명령어 잘쓰기 (0) | 2008.12.04 |