8

私はにcvopyしようとし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());

2つ目も機能していません。

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 に答える