【发布时间】:2011-12-24 06:34:23
【问题描述】:
我有一个 std::vector。我想将向量的内容复制到一定大小的 char* 缓冲区中。
有安全的方法吗?
我可以这样做吗?
memcpy(buffer, _v.begin(), buffer_size);
还是这个?
std::copy(_v.begin(), _v.end(), buffer); // throws a warning (unsafe)
还是这个?
for (int i = 0; i < _v.size(); i++)
{
*buffer = _v[i];
buffer++;
}
谢谢..
【问题讨论】:
-
我的 C++-fu 有点生疏了,但
char* str = &_v[0];不会做这项工作吗? -
@Polynomial 可能,至少一开始是这样。如果向量曾经重新分配其缓冲区,则位置可能会更改,并且如果向量被破坏,则指针无效。它的风险足够大,可能不是一个好的主意。
-
@Polynomial:这不会将向量复制到不同的缓冲区,它只会获取向量中内部缓冲区的地址。
-
@Polynomial:目前这会很好地工作,甚至更快,但是,当您向向量添加一些数据并超出其容量时,它会中断。到时候,它会分配一个新的块并释放你指向的那个。
-
真正的问题是:为什么要使用
char*缓冲区?std::vector在(几乎)各方面都好得多。