Dip*_*Sen 7 c++ string boost iterator stdstring
我想cvopy boost::array<char>到std::string.
boost::array<char, 1024> _buffer;
std::string data;
std::copy(_buffer.begin(), _buffer.begin()+bytes_transferred, data.begin());
Run Code Online (Sandbox Code Playgroud)
这是行不通的.所以我稍微改了一下.
char _buffer[1024];
std::string data;
std::copy(_buffer, _buffer+bytes_transferred, data.begin());
Run Code Online (Sandbox Code Playgroud)
第二个也没有工作.
tem*_*def 15
这里的问题是copy假设您正在编写的数据已经存在空间; 它不会为您创造任何新的空间.因此,上述两个代码都会导致未定义的行为,因为您将要将字符复制到之前未保留空间的位置.
执行此操作的最佳方法是使用string构造函数:
boost::array<char, 1024> _buffer;
std::string data(_buffer.begin(), _buffer.end());
Run Code Online (Sandbox Code Playgroud)
要么
char _buffer[1024];
std::string data(_buffer, _buffer + 1024);
Run Code Online (Sandbox Code Playgroud)
这将初始化字符串作为存储在数组中的数据的副本.
希望这可以帮助!
您可以使用back_insert_iterator.分配给它将调用push_back底层容器的功能,因此您不必担心手动分配空间.
std::copy(_buffer.begin(), _buffer.begin()+bytes_transferred, std::back_inserter(data));
Run Code Online (Sandbox Code Playgroud)