2010-08-06 20 views
6

मैं सी ++ से डेल्फी तक एक विशाल परियोजना का अनुवाद करने की कोशिश कर रहा हूं और मैं अनुवाद को अंतिम रूप दे रहा हूं। मैंने छोड़ी चीजों में से एक '\ 0' राक्षस है।सी ++ में ' 0' क्या है?

if (*asmcmd=='\0' || *asmcmd==';') 

जहां asmcmd char * है।

मुझे पता है कि \ 0 अंक सी ++ में सरणी प्रकार का अंत है, लेकिन मुझे इसे बाइट के रूप में जानना है। क्या यह 0 है?

दूसरे शब्दों में, क्या नीचे कोड सी ++ लाइन के बराबर होगा?

if(asmcmd^=0) or (asmcmd^=';') then ... 

जहां asmcmd PAnsiChar है।

आपको मेरे प्रश्न का उत्तर देने के लिए डेल्फी नहीं पता है, लेकिन मुझे बाइट के रूप में बताएं। वह भी काम करेगा। :)

उत्तर

13

'\0'0 के बराबर है। यह सी से एक अवशेष है, जिसमें कोई स्ट्रिंग प्रकार नहीं है और इसके बजाय चार सरणी का उपयोग करता है। एक स्ट्रिंग के अंत को चिह्नित करने के लिए शून्य वर्ण का उपयोग किया जाता है; पूर्व-निरीक्षण में एक बहुत ही बुद्धिमान निर्णय नहीं - अधिकांश अन्य स्ट्रिंग कार्यान्वयन कहीं समर्पित समर्पित चर का उपयोग करते हैं, जो सी के ओ (एन) के बजाय स्ट्रिंग ओ (1) के अंत को ढूंढता है।

*asmcmd=='\0' एक काल्पनिक भाषा में length(asmcmd) == 0 या asmcmd.is_empty() की जांच करने का एक ठोस तरीका है।

+3

कनवॉल्यूट, शायद ... लेकिन यह जानना महत्वपूर्ण है कि आपको ** ** '' 0'' का उपयोग कब करना चाहिए। एक उदाहरण है '(char * c = str; * c! =' \ 0 '; C++)' बनाम 'के लिए' int i = 0; i David

+3

@ डेविड: "' * सी! = '\ 0'' "क्यों न सिर्फ' (char * c = str ; * सी; सी ++) '? – SigTerm

+0

धन्यवाद, यह पूरी तरह से अलग है जो मैंने सोचा था। :) – qwerty101

3

null या char मूल्य 0 के लिए यह char है। यह स्ट्रिंग के अंत में प्रयोग किया जाता है।

+0

तो यह 0 जैसा मैंने सोचा था। धन्यवाद! – qwerty101

+0

नहीं, इसका मतलब है "स्ट्रिंग का अंत"। – Weboide

+2

'\ 0'' शून्य 'नहीं है लेकिन 'NUL' :) पूर्व एक सूचक है, बाद वाला एक चरित्र है। – fredoverflow

5

कड़ाई से यह ऑक्टल वैल्यू शून्य (जो निश्चित रूप से किसी भी आधार में शून्य भी है) के साथ चरित्र के लिए एक बच निकला अनुक्रम है।

यद्यपि आप एक अंडाकार वर्ण कोड निर्दिष्ट करने के लिए शून्य के साथ उपसर्ग किए गए किसी भी संख्या का उपयोग कर सकते हैं (उदाहरण के लिए '\040' एएससीआईआई एन्कोडिंग में एक स्पेस कैरेक्टर है) तो शायद ही कभी ऐसा करने का कारण होगा। '\ 0' एक एनयूएल चरित्र निर्दिष्ट करने के लिए मूर्खतापूर्ण है (क्योंकि आप कीबोर्ड से ऐसा चरित्र टाइप नहीं कर सकते हैं या इसे अपने संपादक में प्रदर्शित नहीं कर सकते हैं)।

आप समान रूप से '\ x0' निर्दिष्ट कर सकते हैं, जो हेक्साडेसिमल में व्यक्त एक एनयूएल चरित्र है।

एनयूएल चरित्र का उपयोग सी और सी ++ में एक वर्ण सरणी में संग्रहीत स्ट्रिंग को समाप्त करने के लिए किया जाता है। यह प्रतिनिधित्व शाब्दिक स्ट्रिंग स्थिरांक और स्ट्रिंग्स के लिए सम्मेलन द्वारा किया जाता है जो <cstring>/<string.h> लाइब्रेरी द्वारा छेड़छाड़ की जाती है। सी ++ में std :: स्ट्रिंग क्लास का उपयोग इसके बजाय किया जा सकता है।

ध्यान दें कि सी ++ में एक चरित्र निरंतर '\0' या 'a' टाइप char है। सी में, शायद अस्पष्ट कारणों से, इसमें int टाइप किया गया है।

+0

मैंने शून्य के बजाय एनयूएल कहने के लिए +1 दिया होगा, लेकिन बाकी भी बहुत अच्छा था ... –

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