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

C++ string append formatted data

本文关键字:格式化数据 字符串 c++      更新时间:2023-10-16

我已经在c++中创建了我自己的字符串类(由于某些原因我不想使用第三方库或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] = '';
    this->hashCode = UINT32_MAX;
}

问题是附加字符串的newLength。我不能计算它,所以我设置了一些"神奇"的乘数,但这是不够的。

这个问题是否可以解决(迭代所有变量或将其更改为其他内容)?我可以使用c++ 11的特性,所以也许有什么?

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

对于gcc,您可以使用vsnprintf的返回值来确定所需的大小。

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