Std::vector::const_iterator没有指向期望的数据
std::vector::const_iterator not pointing to desired data
我在Gui
类中有一个名为log
的std::vector<const char*>
,我试图迭代并使用这些值作为库函数的参数。问题是它似乎返回不正确/错误输入的数据。
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);
}
这将正确格式化字符串并将其添加到vector中。如果在对缓冲区执行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))
而不是终端打印函数,它仍然打印不正确的数据,因此它似乎不是库函数的问题。
重构数据结构以存储消息是一种选择,但是字符串需要能够被正确格式化并传递给标准库的print函数。
缓冲区是临时存储,仅在Message函数返回之前有效。您正在保存指向缓冲区所在位置的指针,但在使用保存的指针之前,其内容将消失。
如果你想要一些像字符串一样的东西,使用std::string
,不要滥用const char*
你不是把const char*
推到buffer
上,你是把char
擦除。
您使用string
,使您的生活更轻松。
相关文章:
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 在c代码之间共享数据的最佳方式
- 链表,反向函数,数据结构
- 数据成员SFINAE的C++17测试:gcc vs clang
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 将指向数据的指针作为参数传递给期望二维数组的函数
- 期望eof,而不是eof附近的任意数据
- Std::vector::const_iterator没有指向期望的数据
- 从cuda 3D内存复制到线性内存:复制的数据不是我所期望的
- 为什么在运行带有"期望"的程序时不生成'gcov'数据?