由于各种原因,我需要格式化一个未知长度的字符串,然后将该字符串提供给函数。我可以分块提供输出字符串。到目前为止,这是我的想法。
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给出格式化后字符串的长度,即使那样我也无法确定使用了多少个args。
理想情况下,我想在不分配堆的情况下执行此操作(我受到性能和空间要求的限制),但这似乎是一个遥不可及的梦想,所以我可能只会动态分配字符串,即输出的大小,并使用该字符串。 (我想我在写这个问题时才找到解决方案)
还有其他方法吗?