我用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);
答案 0 :(得分:4)
使用gcc,您可以使用vsnprintf
的返回值来了解所需的大小。
对于msvc,您必须增加大小,直到vsnprintf
没有返回-1。