我正在尝试将boost::array<char>
复制到std::string
。
boost::array<char, 1024> _buffer;
std::string data;
std::copy(_buffer.begin(), _buffer.begin()+bytes_transferred, data.begin());
哪个不行。所以我稍微改了一下。
char _buffer[1024];
std::string data;
std::copy(_buffer, _buffer+bytes_transferred, data.begin());
第二个也不起作用。
答案 0 :(得分:15)
这里的问题是copy
假设您正在编写的数据已经存在空间;它不会为您创造任何新的空间。因此,上述两个代码都会导致未定义的行为,因为您将要将字符复制到之前未保留空间的位置。
执行此操作的最佳方法是使用string
构造函数:
boost::array<char, 1024> _buffer;
std::string data(_buffer.begin(), _buffer.end());
或
char _buffer[1024];
std::string data(_buffer, _buffer + 1024);
这会将字符串初始化为存储在数组中的数据的副本。
希望这有帮助!
答案 1 :(得分:5)
您可以使用back_insert_iterator。分配给它将调用基础容器的push_back
函数,因此您不必担心手动分配空间。
std::copy(_buffer.begin(), _buffer.begin()+bytes_transferred, std::back_inserter(data));