C++;字符串附加格式化数据 我在C++中创建了自己的字符串类(我不想使用第三方LIB或STD::String作为某些原因)。

C++;字符串附加格式化数据 我在C++中创建了自己的字符串类(我不想使用第三方LIB或STD::String作为某些原因)。,c++,string,c++11,C++,String,C++11,现在,我在将格式化字符串附加到自己的字符串中时遇到了一个问题。我创建了这个函数: 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-&

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

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;
}

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


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

对于msvc,它看起来不像是非常“高效友好”的解决方案:-(@MartinPerry您可以vsnprintf()在一个大的本地缓冲区中,并将结果附加到字符串中,以降低这种效率。对于msvc,您可以首先调用vscprintf以获得所需的长度,
MyStringAnsi str = "xy";
str.AppendFormat("%s AND %d", someLongString, -50.7);