2014-09-14 6 views
1

Я хочу создать эту функцию, но ... списки параметров не могут быть переданы таким образом. Каков правильный способ этого?Передача ... параметров в C

И да, я знаю, что некоторые компиляторы предоставляют «asprintf». Мой вопрос не в том, какую функцию я должен использовать, а в том, как заставить этот параметр работать, как это работает.

// Allocates a formmated string 
char *msprintf(const char *format, ...) 
{ 
    int size = snprintf(NULL, 0, format, ...); 

    char *buf = (char*)malloc(size); 
    snprintf(buf, size, format, ...); 

    return buf; 
} 
+0

посмотреть «варгары». – keshlam

+0

В моем ограниченном опыте, va_args - единственный способ, который я думаю. –

+1

http://www.cprogramming.com/tutorial/c/lesson17.html – OldProgrammer

ответ

1

Вы должны использовать vsnprintf() внутри звонка.

char *msprintf(const char *format, ...) { 
    va_list args; 
    va_start(args, format); 

    int size = vsnprintf(NULL, 0, format, args); 
    char *buf = malloc(size); 
    vsnprintf(buf, size, format, args); 

    va_end(args); 
    return buf; 
} 
Смежные вопросы