8

我正在尝试 cvopyboost::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());

第二个也不起作用。

4

2 回答 2

15

这里的问题是copy假设您正在写入的数据已经存在空间;它不会为您创造任何新空间。因此,上述两段代码都会导致未定义的行为,因为您要将字符复制到以前未保留空间的位置。

最好的方法是使用string构造函数:

boost::array<char, 1024> _buffer;
std::string data(_buffer.begin(), _buffer.end());

或者

char _buffer[1024];
std::string data(_buffer, _buffer + 1024);

这会将字符串初始化为存储在数组中的数据的副本。

希望这可以帮助!

于 2012-06-14T19:50:39.787 回答
5

您可以使用back_insert_iterator。分配给它会调用push_back底层容器的函数,所以你不必担心手动分配空间。

std::copy(_buffer.begin(), _buffer.begin()+bytes_transferred, std::back_inserter(data));
于 2012-06-14T19:59:40.060 回答