2013-06-08 10 views
6

मैं जानता हूँ कि हम इस तरह एक स्ट्रिंग सरणी समाप्त करने के लिए एक अशक्त चरित्र का उपयोग करना होगा:स्ट्रिंग सरणी में एक नल कैरेक्टर क्यों जोड़ रहा है?

char str[5] = { 'A','N','S','\0' }; 

लेकिन मैं क्यों इस तरह एक सरणी समाप्त करने के लिए एक अशक्त चरित्र का उपयोग करने के लिए यह आवश्यक है जानना चाहता था?

भी कारण है कि हम इन समाप्त करने के लिए एक अशक्त charater जोड़ सकता हूँ नहीं: -

char str1[5]="ANS"; 
+4

क्योंकि एक अशक्त स्वयं स्ट्रिंग कई बाइट्स ले सकता है के साथ स्ट्रिंग की लंबाई भंडारण जबकि एक बाइट लेता है,। दिन में मेमोरी बहुत कम थी, इसलिए छोटा समाधान जीता। – dlev

+0

अब मैं यही देख रहा हूं। –

+0

यहां एक विकिपीडिया लेख है जो आपको ऐतिहासिक पृष्ठभूमि देता है: http://en.wikipedia.org/wiki/Null-terminated_string – xxbbcc

उत्तर

8

एनएलएल-टर्मिनेशन सी में स्ट्रिंग (एक पूर्ण-समाप्ति वाले चार-सरणी) से एक चार सरणी को अलग करता है। अधिकांश स्ट्रिंग-मैनिपुलेटिंग फ़ंक्शन स्ट्रिंग समाप्त होने पर जानने के लिए NULL पर निर्भर करता है (और इसका काम पूरा हो जाता है), और सरल चार-सरणी के साथ काम नहीं करेगा (उदाहरण के लिए। वे सरणी की सीमाओं के पीछे काम करना जारी रखेंगे, और तब तक जारी रखें जब तक कि यह स्मृति में कहीं नल न हो - अक्सर स्मृति को दूषित करता है)।

सी में, 0 (पूर्णांक मान) को बूलियन फाल्स माना जाता है - अन्य सभी मानों को सत्य माना जाता है। , और के लिए 0 (FALSE) या गैर-शून्य (TRUE) का उपयोग करता है ताकि शाखा या कैसे लूप को रोक दिया जा सके। char एक पूर्णांक प्रकार है, एक पूर्ण-वर्ण (\ 0) वास्तव में और केवल दशमलव पूर्णांक मान 0 - यानी वाला एक char है। असत्य। यह तारों को छेड़छाड़ करने या प्रतिलिपि बनाने जैसी चीजों के लिए कार्यों को बनाने में बहुत आसान बनाता है, क्योंकि जब तक वह जिस चरित्र पर काम कर रहा है वह सुरक्षित रूप से लूप कर सकता है, तब तक शून्य-शून्य (यानी सत्य) होता है और जब यह नल-कैरेक्टर (यानी। गलत) - क्योंकि यह स्ट्रिंग के अंत को दर्शाता है। यह बहुत सरल लूप बनाता है, क्योंकि हमें इसकी तुलना करने की आवश्यकता नहीं है, हमें केवल यह जानने की जरूरत है कि यह 0 (गलत) है या नहीं (TRUE)।

उदाहरण:

 

    char source[]="Test"; // Actually: T e s t \0 ('\0' is the NULL-character) 
    char dest[8]; 

    int i=0; 
    char curr; 

    do { 
     curr = source[i]; 
     dest[i] = curr; 
     i++; 
     } while(curr); //Will loop as long as condition is TRUE, ie. non-zero, all chars but NULL. 

+0

NULL एक सूचक मूल्य है। एनयूएल एक ASCII चरित्र है। चार सरणी एनयूएल समाप्त कर रहे हैं। चार पॉइंटर्स के पास मूल्य शून्य हो सकता है। –

+1

सी _null सूचक स्थिर_ के लिए ''\ 0'' और' NULL' के लिए _null character_ का उपयोग करता है। 'एनयूएलआई कोड 0 को इंगित करने के लिए एएससीआईआई से है। पोस्ट में संशोधन की सिफारिश करें। – chux

1

यह नहीं है आवश्यक लेकिन आप मानक पुस्तकालयों के किसी भी उपयोग कर रहे हैं, वे सब यह उम्मीद करते हैं।

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