Boost find_first как это работает? / Определить диапазон

У меня есть буфер (например, char buffer [1024] ), который заполняется некоторыми данными. Теперь я хочу найти подстроку в этом буфере. Поскольку это должен быть поиск без учета регистра, я использую boost :: algorithm :: ifind_first .

Итак, я вызываю функцию следующим образом:

boost::iterator_range buf_iterator;
buf_iterator = boost::algorithm::ifind_first(buffer ,"substring");

Это действительно отлично работает. Но меня беспокоит следующее:

Я передаю функции только указатель на char , поэтому ifind_first не должен знать, где заканчивается мой буфер, но он все равно работает.

Моя первая идея заключалась в том, что функция выполняет поиск до символа завершения строки. Но в документации по Boost функция определена следующим образом:

template 
  iterator_range< typename range_iterator< Range1T >::type > 
  find_first(Range1T & Input, const Range2T & Search);

Поскольку она работает с параметрами шаблона, я действительно сомневаюсь, что она работает с нулевым завершением?

Итак, мой вопрос: как ifind_first знаете, где остановиться? Или, если быть более точным, как я могу дать ему диапазон? Как уже упоминалось, он отлично работает с char * , но я не совсем уверен, что мне не просто повезло - я имею в виду, что в худшем случае функция вызывается и не знает, где остановиться и переходит в неопределенную память ...

Редактировать:

Теперь в ответе упоминалось, что это зависит от типа, который я передаю функции.Это будет означать, что если я работаю с буфером char , я должен всегда следить за тем, чтобы он завершался нулем ...?

5
задан Lightness Races with Monica 20 February 2012 в 15:08
поделиться