簡體   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