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

标签 c++ string c++11

我已经用 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/

相关文章:

c++ - 哪个是更好的字符串搜索算法? Boyer-Moore 还是 Boyer Moore Horspool?

C++11 Lambda 通过捕获传递

c++ - 在 C++ 中计算标准差和方差

C++ 和 Lua 集成参数 (...) (Lua 5.1)

regex - R在字符串内填充0

php - 为什么传递给 PHP 的 cookie 或数据字符串中缺少 "+"个字符,以及如何更正此问题

php - 如何将字符串转换为仅包含双引号字符的数组

c++ - 如何创建一个新变量并同时在 std::tie 中使用它?

c++ - 在 C++ 的父构造函数中调用重写的方法

c++ - 为什么类型推导在(非指针)函数类型上失败