2010-02-18 17 views
17

मैं Pex के साथ खेल रहा हूं और यह मेरी विधि में गुजरने वाले पैरामीटर में से एक है "\0"सी # - " 0" के बराबर क्या है?

कि क्या मतलब है? मेरा अनुमान है कि मेरी विधि की सामग्री के आधार पर एक खाली स्ट्रिंग ("") है। हालांकि, अगर यह वही है तो "\0" के बजाय "" का उपयोग क्यों न करें?

कोई भी जानता है कि यह क्या है?

+0

यह एक बैकस्लैश एक शून्य द्वारा पीछा युक्त स्ट्रिंग गुजर रहा है, या यह एक स्ट्रिंग शून्य चरित्र युक्त गुजर रहा है? –

+0

कोड यही कहता है: 'this.TestSaveString (" \ 0 ");' – Vaccano

+0

सभी महान उत्तरों के लिए धन्यवाद! मैंने रैंडोल्फो का चयन किया क्योंकि इससे मुझे क्या चल रहा था इसके बारे में सबसे ज्यादा जानकारी मिली। – Vaccano

उत्तर

32

'\ 0' एक "null character" है। इसका उपयोग सी में तारों और सी ++ के कुछ हिस्सों को समाप्त करने के लिए किया जाता है। Pex यह देखने के लिए एक परीक्षण कर रहा है कि आपका कोड शून्य चरित्र को कैसे संभालता है, संभवतः Poison Null Byte सुरक्षा शोषण की तलाश में है।

अधिकांश सी # कोड में डरने के लिए कुछ भी नहीं है; यदि आप अपनी स्ट्रिंग को अप्रबंधित कोड में पास करते हैं, तो आपको समस्या हो सकती है।

संपादित करें:

बस स्पष्ट होना करने के लिए ... Pex एक स्ट्रिंग एक अशक्त चरित्र युक्त गुजर रहा है। यह एक शून्य संदर्भ है।

+3

ध्यान दें कि एक नल स्ट्रिंग एक खाली स्ट्रिंग के समान नहीं है। एमएसडीएन आलेख से: "इसके विपरीत, एक नल स्ट्रिंग किसी सिस्टम के उदाहरण का संदर्भ नहीं देती है। स्ट्रिंग ऑब्जेक्ट और नल स्ट्रिंग पर विधि को कॉल करने का कोई भी प्रयास नल रेफरेंस एक्सेप्शन में होता है। हालांकि, आप कॉन्सटेनेशन में नल स्ट्रिंग का उपयोग कर सकते हैं और अन्य तारों के साथ तुलना संचालन। निम्नलिखित उदाहरण कुछ मामलों को चित्रित करते हैं जिनमें एक नल स्ट्रिंग का संदर्भ होता है और " – jfawcett

5

यह एक स्ट्रिंग है जिसमें वर्ण '\ 0' है। सी # किसी विशेष रूप से विशेष तरीके से इसका इलाज नहीं करता है - यह सिर्फ यूनिकोड चरित्र यू +0000 है। यदि आप लिखना:

int firstCodePoint = text[0]; 

तो आप मिल जाएगा firstCodePoint है 0.

3

यह एक अशक्त चरित्र के साथ एक स्ट्रिंग है। पुराने स्ट्रिंग लाइब्रेरी — जैसे सी या पुराने सी ++ पुस्तकालयों में उपयोग किया गया — स्ट्रिंग के अंत को इंगित करने के लिए '\ 0' वर्ण का उपयोग करता है।

नेट जैसे नए वातावरण एक अलग सिस्टम का उपयोग करते हैं, लेकिन '\ 0' के साथ एक स्ट्रिंग को समाप्त करने के आसपास बहुत सारे इतिहास हैं, जैसे कि यह त्रुटि का एक आम बिंदु है। पेक्स जैसे परीक्षण पुस्तकालय इसका उपयोग यह सुनिश्चित करने के लिए करेंगे कि आपका प्रोग्राम सही तरीके से संभालता है।

+0

एह" को अपवाद का कारण नहीं बनता है ....मैं खुद को -1 तक नहीं ला सकता, लेकिन ऐसा लगता है कि आप यह कह रहे हैं कि सी # तारों को निरस्त कर दिया गया है। वो नहीं हैं। – Randolpho

+0

@ रैंडोल्फो "नए वातावरण जैसे .Net एक अलग सिस्टम का उपयोग करते हैं" - मुझे लगता है कि मैं बिल्कुल विपरीत विपरीत हूं। –

+0

हाँ। मुझे यकीन नहीं है कि इस तरह कुछ भी कैसे निहित है। –

2

लंबाई 1 की एक स्ट्रिंग, जिसमें वर्ण \ u0000 (उर्फ एनयूएल) शामिल है। इस चरित्र का विशेष रूप से इलाज नहीं किया जाता है।

सी में, जो स्ट्रिंग को समाप्त करने के लिए \ 0 का उपयोग करता है, आप लंबाई की एक स्ट्रिंग भी आवंटित करते हैं। इस मामले में मानक स्ट्रिंग फ़ंक्शन 0 की लंबाई की रिपोर्ट करेंगे, क्योंकि स्ट्रिंग में \ 0 के साथ-साथ समाप्त हो रहा है यह। आप स्ट्र [0] को सुरक्षित रूप से संशोधित कर सकते हैं, या इसमें एक वर्ण को strncat कर सकते हैं।

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