c++ - std::vector::const_iterator 未指向所需数据

标签 c++ iterator stdvector

我有一个 std::vector<const char*>名为 log在类里面Gui我正在尝试遍历并将这些值用作库函数的参数。问题是它似乎返回不正确/错误键入的数据。

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

这会正确格式化字符串并将其添加到 vector 中。如果我调用 puts(log.front())在我之后emplace缓冲区,它将正确的输出打印到控制台。另外,如果我 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))而不是终端打印功能,它仍然打印不正确的数据,因此看起来不是库函数的问题。

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

最佳答案

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

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

关于c++ - std::vector::const_iterator 未指向所需数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32429181/

相关文章:

c++ - 指针、 vector 列表 = 大量困惑

c++ - 如何在循环中迭代两个 vector

c++ - 如何从 STL 的 const_iterator 中获取数据?

C++ 使用 lz4 压缩,压缩信息不符合预期

java - 迭代 map 时为struts迭代器指定范围

c++ - 如何在 C++ 中迭代包含 map 的 map

c++ - 在清除之前检查一个 vector ?

c++ - 指针 vector 中的内存泄漏,如何防止?

c++ - 如何在 Visual Studio 2017 中为 C++ 控制台应用程序添加头文件

c++ - 传递 `const` 作为参数时是否需要写 `const_iterator` 关键字?