У меня есть буфер (например, 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
, я должен всегда следить за тем, чтобы он завершался нулем ...?