추가 인자를 받는 ...에 대해서 질문드립니다.
글쓴이: mydream / 작성시간: 수, 2016/11/02 - 1:26오후
printf의 마지막 매개변수에 ...이 언급되는데, 이건 추가로 언급되는 값들을 받는 파라미터라고 알고 있습니다. sprintf_s라는 것이 제대로 작동이 안되서 제가 직접 버퍼 오버플로우를 방지하는 함수를 만들고자 합니다. 그런데 한 가지 문제는 ...의 타입이 일정하지 않다는 것입니다.
...을 얻어오려면 stdarg.h 에 정의되 있는 va_list, va_start, va_arg, va_end를 사용해야 하죠.
int sprintf_s( char *buffer, size_t sizeOfBuffer, const char* format, ...)
이것이 이 함수의 원형이고요, 버퍼 오버플로우를 막기 위해 만들 함수는
int s_sprintf_s( char* buffer, size_t elelength,size_t sizeOfBuffer, const char* format, ...) { va_list vl; va_start(vl, format); while(...) {//의사코드. 서식문자 수만큼 루프를 돕니다. var_arg(vl, type);//여기서 type을 어떻게 지정해야 하냐는 것이죠. } va_end(vl); }
가령 format이 "%d %f" 라고 할 때 %d에서는 va_arg(vl, int) %f는 va_arg(vl, float) 이라고 하면 될까요?
if(%d가 int이면) {
va_arg(vl, int);
}
else if(%f가 float이면) {
va_arg(vl, float);
}
이렇게 하는 것이 가능한가요? 나머지 서식문자 %u, %c 등은 어떻게 해야 하는지 궁금합니다.
Forums:
http://lxr.free-electrons.com
http://lxr.free-electrons.com/source/lib/vsprintf.c#L1974
굉장히 복잡한 과정이 필요하군요.
그냥 쓰겠습니다. 감사합니다. ㅜㅜ""
C++ 에서는 함수 인자를 달리하고. 함수 이름을 같게 할 수 있습니다.
http://codepad.org/nsvPHHGp
http://codepad.org/2YL0Qoud
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기