2010-01-02 5 views
10

क्या स्ट्रस्ट्र का एक संस्करण है जो स्मृति की एक निश्चित लंबाई पर काम करता है जिसमें शून्य वर्ण शामिल हो सकते हैं?स्ट्रस्ट्र का एक शुद्ध बाइट संस्करण?

मैं इस तरह अपना प्रश्न वाक्यांश कर सकता हूं: strncpy स्ट्रैस्ट के रूप में memcpy है?

+1

बेहतर आप ऐसी कार्यक्षमता रखने के लिए एक नया सी प्रोग्राम लिख सकते हैं। मुझे नहीं लगता कि यह एक जटिल बात होगी। – Vijay

उत्तर

14

memmem, दुर्भाग्यवश यह मानक सी के बजाय जीएनयू-विशिष्ट है। हालांकि, यह ओपन-सोर्स है ताकि आप कोड कॉपी कर सकें (यदि लाइसेंस आपके लिए उपयुक्त है)।

7

standard library में नहीं (जो इतना बड़ा नहीं है, इसलिए एक नज़र डालें)। हालांकि खुद को लिखना मामूली है, या तो सीधे बाइट द्वारा बाइट या memchr() का उपयोग करके memcmp() इसके बाद।

+0

+1, मुझे memchr और memcpy का उपयोग करने का विचार पसंद है। आप एक स्ट्रस्ट्र कार्यान्वयन verbatim ले सकते हैं और सभी str-functions को उनके mem-counterparts के साथ प्रतिस्थापित कर सकते हैं। – quinmars

+0

स्ट्रस्ट्र का अच्छा कार्यान्वयन बिल्कुल छोटा नहीं है - वे परिष्कृत एल्गोरिदम का उपयोग बहुत कम काम करने के लिए करते हैं, एक छोटे से एल्गोरिदम कर सकते हैं। उदाहरण के लिए यहां जीएनयू libc में कार्यान्वयन का मूल है: http://bazaar.launchpad.net/~vcs-imports/glibc/master/view/head:/string/str-two-way.h –

+0

@GregPrice: I मैं सुझाव दे रहा हूं कि मानक लाइब्रेरी 'स्ट्रस्ट्र() 'जरूरी रूप से तुच्छ है; बस ओपी की कार्यक्षमता को कार्यान्वित किया जा सकता है, भले ही आम तौर पर इष्टतम समाधान कम हो। मानक पुस्तकालय कार्यान्वयन को अत्यधिक अनुकूलित किया जाना चाहिए क्योंकि उनका आवेदन अग्रिम में ज्ञात नहीं है। किसी एप्लिकेशन को विशिष्ट कोड लिखते समय, उसे केवल आवेदन आवश्यकताओं को पूरा करने के लिए पर्याप्त तेज़ (या छोटा) होना चाहिए। इस विशिष्ट मामले में आपके उदाहरण के समान कार्यान्वयन अनचाहे हो सकता है। – Clifford

0

मानक पुस्तकालय में, नहीं। हालांकि, "सुरक्षित सी स्ट्रिंग लाइब्रेरी" के लिए एक त्वरित Google खोज कई संभावित उपयोगी परिणाम बदलती है। जिस कार्य को आप करने का प्रयास कर रहे हैं, उसके बारे में अधिक जानने के बिना, मैं किसी विशेष तृतीय-पक्ष कार्यान्वयन की अनुशंसा नहीं कर सकता।

यह केवल "सुरक्षित" समारोह है कि आप मानक कार्यों से परे की जरूरत है, तो यह सबसे अच्छा अपने खुद के रोल के बजाय एक तीसरे पक्ष के पुस्तकालय को एकीकृत करने की प्रयास व्यय हो सकता है, बशर्ते आप आप कर सकते हैं कि विश्वास है अतिरिक्त बग पेश किए बिना ऐसा करें।

+1

मुझे प्रश्न में "सुरक्षित" शब्द नहीं दिखाई देता है। –

+0

आप सही हैं कि मैंने प्रश्न की थोड़ी अलग व्याख्या की। "नल शामिल हो सकता है" का एक व्यापक पठन इस बात पर विश्वास कर सकता है कि इसमें नल भी शामिल नहीं हो सकते हैं। चूंकि शून्य समाप्ति की कमी एक प्रमुख मुद्दा है जो लोगों को 'strncpy() '(और, वास्तव में,' strlcpy()') पर विचार करने के लिए प्रेरित करता है, यह उस दिशा से मेरे उत्तर को संबोधित करने के लिए उचित लग रहा था, क्योंकि अन्य उत्तरों पहले से ही अन्य दृष्टिकोणों को कवर कर चुके थे । मैंने यह कहकर यह ध्यान देने का प्रयास किया "कार्य के बारे में अधिक जानने के बिना ... मैं किसी विशेष तृतीय-पक्ष कार्यान्वयन की अनुशंसा नहीं कर सकता।" शायद मैं और अधिक स्पष्ट हो सकता था। – Adam

संबंधित मुद्दे