По разным причинам мне нужно отформатировать строку неизвестной длины, а затем передать эту строку в функцию.Я могу предоставить строку вывода в кусках.Пока это моя идея.
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 дает длину строки после форматирования, и даже тогда я не могу определить, сколько аргументов было использовано.
В идеале, я хотел бы сделать это без выделения в куче (яограничено требованиями к производительности и пространству), но кажется, что это надуманная мечта, поэтому я, вероятно, просто получу динамически распределенную строку, которая соответствует размеру вывода, и буду работать с этим.(Я думаю, что только что нашел решение, когда писал этот вопрос)
Есть ли другой способ сделать это?