我已经用 C++ 创建了自己的字符串类(由于某些原因,我不想使用第 3 方库或 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
上。我无法计算它,所以我通过一些“神奇”乘数来设置它,但这还不够。
这个问题可以解决吗(迭代所有变量或将其更改为其他内容)?我可以使用 C++11 功能,所以也许有什么东西?
我用
调用我的代码MyStringAnsi str = "xy";
str.AppendFormat("%s AND %d", someLongString, -50.7);
最佳答案
使用 gcc,您可以使用 vsnprintf
的返回值来知道所需的大小。
对于 msvc,您必须增加大小,直到 vsnprintf
不返回 -1。
关于C++ 字符串附加格式化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31626170/