Форматирование строки неопределенной длины в C с vsnprintf - PullRequest
0 голосов
/ 25 сентября 2018

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

void formatToSomeFunction(const char * str_msg, ...){
    int length = 0;    
    char buffer[100];

    va_list args;
    va_start(args, str_msg);

    while(!(length >= 0 && length < 100)){
        length = vsnprintf(buffer,100, str_msg, args);
        some_output_function(buffer,100);
        str_msg += 100;
    }

    va_end(args);
}

К сожалению, это не сработает.vsnprintf дает длину строки после форматирования, и даже тогда я не могу определить, сколько аргументов было использовано.

В идеале, я хотел бы сделать это без выделения в куче (яограничено требованиями к производительности и пространству), но кажется, что это надуманная мечта, поэтому я, вероятно, просто получу динамически распределенную строку, которая соответствует размеру вывода, и буду работать с этим.(Я думаю, что только что нашел решение, когда писал этот вопрос)

Есть ли другой способ сделать это?

...