2012. 7. 13. 16:37

가변 인자를 받아 해석해 출력하는 예제

#include <stdio.h>
#include <stdarg.h>                // 가변 인자 함수를 사용하기 위해 필요

void parse_args(char *fmt, ...);

int main()
{
        parse_args("%d", 7);
        parse_args("%f", 3.14);
        parse_args("%s is %d years old.", "Smith", 22);
}

void parse_args(char *fmt, ...)
{
        int d;
        double f;
        char *str;
        va_list ap;                                // 가변 인자를 처리해주는 리스트
        
        printf("format string: %s\n", fmt);
        printf("parsed string: ");
        
        /* 가변 리스트의 시작 */
        va_start(ap, fmt);
        while (*fmt) {
                if (strncmp(fmt, "%d", 2) == 0) {                // 정수인 경우
                        d = va_arg(ap, int);
                        printf("%d", d);
                        fmt+=2;
                }
                else if (strncmp(fmt, "%f", 2) == 0) {        // 실수인 경우
                        f = va_arg(ap, double);
                        printf("%lf", f);
                        fmt+=2;
                }
                else if (strncmp(fmt, "%s", 2) == 0) {        // 문자열인 경우
                        str = va_arg(ap, char *);
                        printf("%s", str);
                        fmt+=2;
                }
                else {
                        printf("%c", *fmt);
                        fmt++;
                }
        }
        va_end(ap);
        /* 가변 리스트의 끝 */
        
        printf("\n\n");
}

-----------------------------------------------

Result
format string: %d
parsed string: 7

format string: %f
parsed string: 3.140000

format string: %s is %d years old.
parsed string: Smith is 22 years old.

Posted by 몰라욧