私はいくつかのデータでいっぱいになるバッファ(例えばchar buffer[1024]
)を持っています。今私は、このバッファ内の部分文字列を検索したいと思います。それは大文字と小文字を区別しない検索でなければならないので、私はboost::algorithm::ifind_first
を使用しています。どのように機能するのですか? /範囲を定義する
だから私はこのように関数を呼び出す:
boost::iterator_range<char*> buf_iterator;
buf_iterator = boost::algorithm::ifind_first(buffer ,"substring");
これは実際には正常に動作します。しかし、私の懸念は次のとおりです:
私は関数char pointer
を渡すので、ifind_first
は私のバッファがどこで終わっているのかわからないはずですが、まだ動作しています。
私の最初のアイデアは、関数が文字列終了文字まで検索することでした。それは私が実際にそれがヌル終了で作業していることを疑うテンプレートパラメータで動作しますので
template<typename Range1T, typename Range2T>
iterator_range< typename range_iterator<Range1T>::type >
find_first(Range1T & Input, const Range2T & Search);
:しかしBoost Documentationに関数が次のように定義されていますか?
私の質問は、ifind_first
はどこで停止するのですか? より正確に言えば、どのように範囲を与えることができますか?すでに言及したように、それはちょうどchar*
でうまく動作しますが、私はちょうど幸運ではなかったかどうかはわかりません - 私は最悪の場合、関数が呼び出され、どこで停止して未定義のメモリに入るのかわかりません。 。
編集:
は今の答えに、それは私が関数に渡すタイプに依存していることが挙げられました。今これは私がchar
バッファを使って作業する場合、私はいつもそれが0で終了していることを確認しなければならないということを意味します...?
ドキュメントの場合は、非常によく隠されています! – CapelliC
あなたの投稿に署名しないでください。 –