C ++字符串附加格式化数据

时间:2015-07-25 11:51:09

标签: c++ string c++11

我用C ++创建了自己的字符串类(由于某些原因,我不想使用第三方lib或std :: string)。

现在我遇到了将格式化字符串附加到我自己的问题。我创建了这个函数:

void MyStringAnsi::AppendFormat(const char * str, ...)
{
    va_list vl;
    va_start(vl, str);

    int newLength = static_cast<int>(this->length + 10 * strlen(str));
    this->ResizeBuffer(this->length + newLength);

    vsnprintf_s(this->str + this->length, newLength, newLength, str, vl);

    va_end(vl);

    this->length = static_cast<int>(strlen(this->str));
    this->str[this->length] = '\0';
    this->hashCode = UINT32_MAX;
}

问题在于附加字符串的newLength。我无法计算它,所以我设置了一些&#34;魔法&#34;乘数,但还不够。

这个问题是否可以解决(迭代所有varagrs或将其更改为其他问题)?我可以使用C ++ 11的功能,那么可能还有什么东西?

我用

调用我的代码
MyStringAnsi str = "xy";
str.AppendFormat("%s AND %d", someLongString, -50.7);

1 个答案:

答案 0 :(得分:4)

使用gcc,您可以使用vsnprintf的返回值来了解所需的大小。

对于msvc,您必须增加大小,直到vsnprintf没有返回-1。