मेरे पास एक बफर है (उदा। 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
को पता नहीं होना चाहिए कि मेरा बफर कहां समाप्त होता है, लेकिन यह अभी भी काम करता है।
अब मेरा पहला विचार यह था कि फ़ंक्शन स्ट्रिंग-टर्मिनेशन वर्ण तक खोज करता है। लेकिन Boost Documentation में समारोह इस तरह परिभाषित किया गया है:
template<typename Range1T, typename Range2T>
iterator_range< typename range_iterator<Range1T>::type >
find_first(Range1T & Input, const Range2T & Search);
चूंकि यह टेम्पलेट मानकों के साथ काम करता है मैं वास्तव में संदेह है कि यह अशक्त समाप्ति के साथ काम कर रहा है?
तो मेरा सवाल यह है कि ifind_first
कैसे पता चलेगा? या अधिक सटीक होने के लिए, मैं इसे एक सीमा कैसे दे सकता हूं? जैसा कि पहले से ही उल्लेख किया गया है, यह char*
के साथ ठीक काम करता है लेकिन मुझे पूरा यकीन नहीं है कि मैं केवल भाग्यशाली नहीं था - मेरा मतलब है कि सबसे बुरे मामले में फ़ंक्शन कहा जाता है और यह नहीं पता कि कहां रुकना है और अपरिभाषित स्मृति में जाना है .. ।
संपादित करें:
अब एक जवाब में उल्लेख किया गया था कि यह प्रकार मैं कार्य करने के लिए पारित पर निर्भर करता है। अब इसका मतलब यह होगा कि अगर मैं char
बफर के साथ काम करता हूं तो मुझे हमेशा यह सुनिश्चित करना होगा कि यह 0-समाप्त हो गया है ...?
यदि दस्तावेज़ इस विधि को बताते हैं तो यह बहुत अच्छी तरह छुपा हुआ है! – CapelliC
कृपया अपनी पोस्ट पर हस्ताक्षर नहीं करें। –