我在一類Gui
,我想遍歷和使用的值作爲一個庫函數的參數有一個名爲std::vector<const char*>
log
。問題是它似乎返回錯誤/錯誤類型的數據。的std ::矢量::爲const_iterator沒有指向所需的數據
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);
}
這將正確格式化字符串並將其添加到向量中。如果我在緩衝區I 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 *'(轉換後),問題是,它指出,向四周釋放存儲直線後。 –