![](/img/trans.png)
[英]Using std::lower_bound with 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.