0

exaplmeの場合、const char* buf次のコンテンツ(mysqlパケット)を含むバッファがあります。

72 00 00 00 select * from `db` where (`name` = "Bill's car")

そして、引用符を使用してクエリのみをostreamに書き込む必要があります。したがって、結果は次のようになります。

select * from `db` where (`name` = \"Bill\'s car\")

私は知っています、それ<< quote <<は引用を作り、ostream.write(buf,len)私が必要とする部分を書くでしょう。

しかし、両方にとって最良の解決策は何でしょうか?

4

1 に答える 1

1

このようなことをする必要があります:

std::copy(buffer + index_of_start_of_sql, buffer + index_of_end_of_sql, std::ostream_iterator<char>(std::cout, ""));

これにより、バッファの内容が1文字ずつ出力ストリーム(この場合std::cout)にコピーされます。その場合、見積もりの​​処理について心配する必要はありません。

正しいことを確認する必要があるのは、2つのインデックス(SQLのチャンクの開始と終了)だけです。

注:これにより、バッファーにあるものが出力されますが、引用符はエスケープされません。引用符をエスケープする必要がある場合は、別のアプローチを取る必要があります。たとえばfor_each、カスタムファンクターを使用して、文字が'または"必要に応じてエスケープされているかどうかを確認します。

于 2011-08-19T14:41:42.967 に答える