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