std::vector::const_iterator 未指向所需数据
std::vector::const_iterator not pointing to desired data
我在 class Gui
中有一个名为 log
的 std::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*
我在 class Gui
中有一个名为 log
的 std::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*