std :: vector :: const_iterator没有指向所需的数据

时间:2015-09-06 23:13:19

标签: c++ iterator stdvector

我在类std::vector<const char*>中有一个名为log的{​​{1}}我正在尝试迭代并使用这些值作为库函数的参数。问题是它似乎返回错误/错误输入的数据。

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); } 缓冲区之后调用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++; } } 而不是终端打印功能,它仍会打印不正确的数据,因此它似乎不是库函数的问题。

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您没有将const char*推到buffer上,而是将char删除。

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