我在类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++;
}
}
而不是终端打印功能,它仍会打印不正确的数据,因此它似乎不是库函数的问题。
重构数据结构以存储消息是一个选项,但字符串需要能够正确格式化并传递给库打印函数。
答案 0 :(得分:1)
只有在Message函数返回之前,您的缓冲区才是临时存储有效的。您正在保存指向缓冲区所在位置的指针,但在使用保存的指针之前其内容将会消失。
如果你想要的东西就像一个字符串,使用std::string
,不要滥用const char*
答案 1 :(得分:0)
您没有将const char*
推到buffer
上,而是将char
删除。
您使用string
让您的生活更轻松。