Tengo un búfer (por ejemplo, char buffer[1024]
) que se llena con algunos datos. Ahora quiero buscar una subcadena en este búfer. Como debería ser una búsqueda insensata de caso, estoy usando boost::algorithm::ifind_first
.Boost find_first ¿cómo funciona?/Definir un rango
Así que llame a la función como esta:
boost::iterator_range<char*> buf_iterator;
buf_iterator = boost::algorithm::ifind_first(buffer ,"substring");
En realidad, esto funciona bien. Pero mi preocupación es la siguiente:
Paso la función solo a char pointer
, por lo que ifind_first
no debería tener idea de dónde termina mi búfer, pero aún funciona.
Ahora mi primera idea fue que la función busca hasta un carácter de terminación de cadena. Pero en el Boost Documentation la función se define de esta manera:
template<typename Range1T, typename Range2T>
iterator_range< typename range_iterator<Range1T>::type >
find_first(Range1T & Input, const Range2T & Search);
ya que trabaja con los parámetros de plantilla que realmente duda de que se está trabajando con terminación nula?
Así que mi pregunta es ¿cómo sabe ifind_first
dónde parar? O para ser más precisos, ¿cómo puedo darle un rango? Como ya se mencionó, funciona bien con un char*
, pero no estoy seguro de si no tuve suerte, es decir, en el peor de los casos se llama a la función y no sabe dónde parar y entra en la memoria indefinida. .
Editar:
Ahora en una respuesta no había mencionado que depende del tipo que pase a la función. Ahora, ¿esto significaría que si trabajo con un buffer char
siempre tengo que asegurarme de que esté terminado por 0 ...?
Si los documentos indican el método, está muy bien escondido. – CapelliC
Por favor, no firme sus publicaciones. –