使用vsnprintf在C中格式化长度不确定的字符串

时间:2018-09-25 20:47:08

标签: c string printf buffer

由于各种原因,我需要格式化一个未知长度的字符串,然后将该字符串提供给函数。我可以分块提供输出字符串。到目前为止,这是我的想法。

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。

理想情况下,我想在不分配堆的情况下执行此操作(我受到性能和空间要求的限制),但这似乎是一个遥不可及的梦想,所以我可能只会动态分配字符串,即输出的大小,并使用该字符串。 (我想我在写这个问题时才找到解决方案)

还有其他方法吗?

0 个答案:

没有答案