Tôi có bộ đệm (ví dụ: char buffer[1024]
) được điền một số dữ liệu. Bây giờ tôi muốn tìm kiếm một chuỗi con trong bộ đệm này. Vì nó nên là một trường hợp tìm kiếm insenstive tôi đang sử dụng boost::algorithm::ifind_first
.Boost find_first cách hoạt động?/Xác định dải ô
Vì vậy, tôi gọi hàm như thế này:
boost::iterator_range<char*> buf_iterator;
buf_iterator = boost::algorithm::ifind_first(buffer ,"substring");
Điều này thực sự hoạt động tốt. Nhưng mối quan tâm của tôi là:
Tôi chuyển chức năng chỉ char pointer
, vì vậy ifind_first
không nên biết nơi bộ đệm của tôi kết thúc, nhưng nó vẫn hoạt động tho.
Bây giờ ý tưởng đầu tiên của tôi là chức năng tìm kiếm cho đến khi ký tự kết thúc chuỗi. Nhưng trong Boost Documentation hàm được định nghĩa như thế này:
template<typename Range1T, typename Range2T>
iterator_range< typename range_iterator<Range1T>::type >
find_first(Range1T & Input, const Range2T & Search);
Kể từ khi nó hoạt động với các thông số mẫu tôi thực sự nghi ngờ rằng nó đang làm việc với chấm dứt null?
Vì vậy, câu hỏi của tôi là cách ifind_first
biết dừng ở đâu? Hoặc chính xác hơn, làm thế nào tôi có thể cung cấp cho nó một phạm vi? Như đã đề cập nó hoạt động tốt với một char*
nhưng tôi không hoàn toàn chắc chắn nếu tôi không chỉ may mắn - tôi có nghĩa là trong trường hợp xấu nhất chức năng được gọi và không biết nơi để dừng lại và đi vào bộ nhớ không xác định .. .
Edit:
Bây giờ trong một câu trả lời có được đề cập rằng nó phụ thuộc vào loại tôi vượt qua để hàm. Bây giờ điều này có nghĩa là nếu tôi làm việc với bộ đệm char
, tôi phải luôn đảm bảo rằng nó đã bị chấm dứt 0 ...?
Nếu tài liệu nêu rõ phương pháp được ẩn rất tốt! – CapelliC
Vui lòng không ký bài đăng của bạn. –