У меня есть std::vector<const char*>
с именем log
в классе Gui
, который я пытаюсь выполнить итерацию и использовать значения в качестве аргументов для библиотечной функции. Проблема в том, что она, кажется, возвращает неверные/ошибочно типизированные данные.std :: vector :: 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);
}
Это форматирует строку правильно и добавляет ее в вектор. Если я вызову puts(log.front())
после I emplace
буфера, он выведет правильный результат на консоль. Кроме того, если I 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))
вместо функции печати терминала, он по-прежнему печатает неправильные данные, поэтому не кажется, проблема с библиотечной функцией.
Рефакторинг структуры данных для хранения сообщений является опцией, но строки должны быть должным образом отформатированы и переданы в функцию печати библиотеки.
Он толкает 'константный символ *' (после преобразования), проблема заключается в том, что она указывает на хранение, который будет освобождён сразу после . –