일부 데이터로 채워지는 버퍼 (예 : char buffer[1024]
)가 있습니다. 이제이 버퍼의 하위 문자열을 검색하려고합니다. 그것은 인시던트 검색이 아니기 때문에 나는 boost::algorithm::ifind_first
을 사용하고 있습니다.부스트 find_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);
그것이 템플릿 매개 변수와 함께 작동하기 때문에 실제로는 널 (null) 종료와 함께 작동하는지 의심 :하지만 Boost Documentation에서 함수는 다음과 같이 정의된다?
그럼 내 질문은 어떻게 ifind_first
어디에서 멈출지를 알고 있습니까? 또는 더 정확하게 말하면 어떻게 범위를 지정할 수 있습니까? 이미 언급했듯이 char*
으로 잘 작동하지만, 나는 운이 좋았던 지 아닌지 잘 모르겠습니다. 최악의 경우 함수가 호출되고 정지 할 위치를 알지 못하고 정의되지 않은 메모리로 들어갑니다. .
편집 :
지금 대답에 나는 함수에 전달할 유형에 따라 달라집니다이 언급되었다. 이제 내가 char
버퍼로 작업한다면 항상 0으로 끝나는 지 확인해야합니다 ...?
문서에 메서드가 명시되어 있으면 매우 잘 숨겨져 있습니다. – CapelliC
게시물에 서명하지 마십시오. –