अन्य सी लाइब्रेरी फ़ंक्शन के रूप में, strcpy
, strcat
की तरह, एक संस्करण है जो स्ट्रिंग के आकार को सीमित करता है (strncpy
, आदि), मुझे आश्चर्य है कि strchr
के लिए ऐसा कोई संस्करण क्यों नहीं है?कोई स्ट्रंच फ़ंक्शन क्यों नहीं है?
उत्तर
यह मौजूद है - यह memchr
कहा जाता है:
ध्यान दें कि 'memchr' * exacly * क्या हो सकता है कि 'strnchr' क्या कर सकता है, क्योंकि' memchr' स्ट्रिंग के अंत में नहीं रुकता है यदि यह' n' तर्क से छोटा है (यानी यह बाइट्स पढ़ सकता है 'strchr' के विपरीत' \ 0' से परे)। 'Memchr' के बराबर" n-less "समतुल्य नहीं है, लेकिन 'rawmemchr', एक जीएनयू एक्सटेंशन जो POSIX और न ही C99 है। – anol
तो '# परिभाषित करें strnchr (घास, सुई, लंबाई) memchr (घास, सुई, strnlen (घास, लंबाई)) 'यह करना चाहिए, है ना? –
सी में, "स्ट्रिंग" शब्द का अर्थ आम तौर पर "वर्णों की शून्य समाप्ति सरणी" का अर्थ है, और str*
फ़ंक्शंस उन प्रकार के तारों पर काम करता है। आपके द्वारा उल्लेख किए गए कार्यों में n
अधिकतर आउटपुट को नियंत्रित करने के लिए अधिकतर है।
यदि आप किसी भी निहित समाप्ति अर्थशास्त्र के बिना एक आर्बिटरी बाइट अनुक्रम पर काम करना चाहते हैं, तो mem*
कार्यों के परिवार का उपयोग करें; आपके मामले में memchr
आपकी आवश्यकताओं को पूरा करना चाहिए।
अच्छी अंतर्दृष्टि, लेकिन मौजूदा कार्यक्षमता के उदाहरण जहां इनपुट स्ट्रिंग के लिए बाध्य प्रदान किया जाता है 'strncmp() 'और' printf ("%। * S", n, s); '। ध्यान दें कि 'strncmp' के लिए एक उचित मैनपेज यह कहने से बचना होगा कि यह तर्क के रूप में तार लेता है, लेकिन बीएसडी और जीएनयू मैनपेज इस संबंध में थोड़ी गड़बड़ी कर रहे हैं। दूसरी तरफ सी मानक पूरी तरह से शब्द है। –
इसके अलावा पॉज़िक्स की 'strnlen() '। –
@ पास्कल क्यूक: दिलचस्प। मैं शायद किसी भी एल्गोरिदम पर दो बार देखता हूं जो 'strnlen' के लिए एक अच्छा उपयोग केस होने का आरोप लगाता है। –
- 1. इस मानचित्र के लिए "कोई फ़ंक्शन नहीं है" क्यों है?
- 2. appendto() कोई फ़ंक्शन नहीं है?
- 3. Subject.onNext कोई फ़ंक्शन नहीं है
- 4. वेबपैक - $ कोई फ़ंक्शन नहीं है
- 5. c.apply कोई फ़ंक्शन नहीं है
- 6. query.on कोई फ़ंक्शन नहीं है
- 7. .done कोई फ़ंक्शन नहीं है
- 8. firebase.database कोई फ़ंक्शन नहीं है
- 9. pg.connect कोई फ़ंक्शन नहीं है?
- 10. db.createCollection कोई फ़ंक्शन नहीं है
- 11. jQuery.parseJSON फ़ंक्शन क्यों नहीं है?
- 12. .Val() फ़ंक्शन क्यों नहीं है?
- 13. vxWorks में कोई मुख्य() फ़ंक्शन क्यों नहीं है?
- 14. idris में स्ट्रीम का कोई फ़िल्टर फ़ंक्शन क्यों नहीं है?
- 15. प्रिंट क्यों पाइथन में कोई फ़ंक्शन नहीं है?
- 16. कोई आंशिक फ़ंक्शन प्रकार शाब्दिक क्यों नहीं है?
- 17. स्कैला में कोई "फ़ंक्शन" विशेषता क्यों नहीं है?
- 18. सी ++ 14 में कोई std :: allocate_unique फ़ंक्शन क्यों नहीं है?
- 19. जावास्क्रिप्ट .map() कोई फ़ंक्शन नहीं है
- 20. पार्टिकल फ़ंक्शन पर कोई ऑरसे विधि क्यों नहीं है जो कुल फ़ंक्शन स्वीकार करती है?
- 21. toDataURL कोई फ़ंक्शन नहीं
- 22. कोई विदेशीऑटोडेलेट क्यों नहीं है?
- 23. कोई वर्दी_डिस्ट्रिब्यूशन क्यों नहीं है?
- 24. jQuery - कोई फ़ंक्शन नहीं ढूंढता?
- 25. .substring त्रुटि: "कोई फ़ंक्शन नहीं है"
- 26. मेरा रिकर्सिव फ़ंक्शन क्यों नहीं लौटाता है?
- 27. सी में snwprintf फ़ंक्शन क्यों नहीं है?
- 28. कोई std :: stou क्यों नहीं है?
- 29. जावा में कोई साधारण "फ़ंक्शन" नहीं है?
- 30. त्रुटि rxjs_Observable __। Observable.forkJoin कोई फ़ंक्शन नहीं है?
आप यह क्यों की आवश्यकता होगी? 'Memchr()' ऐसा नहीं करता है जो 'strnchr() 'करेगा? –
@ जोनाथन लेफ्लर संभवतः 'strnchr()' टर्मिनेटर हिट होने पर एक बार रोक देगा * या * अधिकतम लंबाई हिट हुई थी। 'strchr_s' एक बेहतर नाम हो सकता है। लेकिन निश्चित रूप से यदि आपके डेटासेट में एक अतिप्रवाह स्ट्रिंग है, तो आप पहले ही खो चुके हैं। – Sneftel
@ स्नीफ्टेल: हम्म ... दिलचस्प ... यदि आपको नहीं पता कि नल समाप्त होने वाली स्ट्रिंग कितनी देर तक है लेकिन पता है कि यह एन बाइट्स से अधिक नहीं है, और आप केवल पहले एम बाइट्स को सबसे अधिक खोजने में रुचि रखते हैं, और एम <एन , लेकिन शून्य-समाप्ति वाली स्ट्रिंग की वास्तविक लंबाई, एल, एम से कम हो सकती है, फिर 'memchr() 'hypothetical' strnchr() 'के समान नहीं है। वैध, भले ही बहुत संभावना न हो। –