繁体   English   中英

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

[英]std::vector::const_iterator not pointing to desired data

我在类Gui中有一个名为std::vector<const char*> log ,我试图对其进行迭代,并将这些值用作库函数的参数。 问题在于它似乎返回错误/错误键入的数据。

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

现在,如果我调用puts((*iter))而不是终端打印函数,它将仍然打印不正确的数据,因此库函数似乎没有问题。

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

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

如果您想使用类似于字符串的东西,请使用std::string ,不要滥用const char*

您不是将const char*推送到buffer ,而是将要擦除的char放入。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM