std::vector::const_iterator 未指向所需数据

std::vector::const_iterator not pointing to desired data

我在 class Gui 中有一个名为 logstd::vector<const char*>,我正在尝试遍历并将这些值用作库函数的参数。问题是它似乎 return incorrect/wrongly 键入了数据。

void Gui::Message(const char *text, ...)
{
    char buffer[256];
    va_list args;
    va_start(args, text);
    vsnprintf(buffer, 256, text, args);
    va_end(args);
    log.emplace(log.begin(), buffer);
}

这会正确格式化字符串并将其添加到向量中。如果我在 emplace 缓冲区之后调用 puts(log.front()),它会将正确的输出打印到控制台。此外,如果我 emplace(text) 而不是缓冲区,则在调用 Gui::render() 时它会正确显示,但显然没有格式化。

void Gui::render()
{
    int y = 1;
    for(std::vector<const char*>::const_iterator iter = log.begin();
        iter != log.end(); iter++);
    {
        terminal_color("light grey");
        //takes x and y coordinates and a const char* and prints to the specified cell
        terminal_printf(1, 45 + y, "%s", (*iter));
        y++;
    }
}

现在如果我调用 puts((*iter)) 而不是终端打印函数,它仍然会打印出不正确的数据,所以这似乎不是库函数的问题。

重构用于存储消息的数据结构是一个选项,但字符串需要能够正确格式化并传递给库打印函数。

您不是将 const char* 推到 buffer 上,而是将 char 推到 buffer 上。

您使用 string 让您的生活更轻松。

您的缓冲区是临时存储,仅在消息函数 returns 之前有效。您正在保存指向缓冲区所在位置的指针,但在使用保存的指针之前其内容将消失。

如果你想要像字符串一样的东西,使用 std::string,不要滥用 const char*