खाली चार का प्रतिनिधित्व कैसे करता है?


84

मैं वर्तमान में एक छोटा कार्यक्रम लिख रहा हूं, लेकिन संकलन करते समय मुझे यह त्रुटि मिलती रहती है

त्रुटि: खाली चरित्र स्थिर

मुझे एहसास हुआ कि मैं खाली जगह के साथ एक वैध चार को बदलने की कोशिश कर रहा हूं, c[i]=''लेकिन मैं इसका प्रतिनिधित्व करने का दूसरा तरीका नहीं खोज पाया हूं।


कोई "रिक्त स्थान" (गलत शब्दावली) नहीं है, हालांकि एक खाली स्ट्रिंग हो सकती है। क्या आप c[i]एक रिक्त स्थान से बदलना चाहते हैं , या क्या आप उस चरित्र को सरणी से "समाप्त" करना चाहते हैं जैसा कि आप एक संपादक में करते हैं जब आप बैकस्पेस दबाते हैं (यानी क्या आप वर्ण चाहते हैं c [i-1] और c [ i + 1] ऑपरेशन के बाद आसन्न हो जाना)?
लोरेंजो डोनाटी - कोडिडैक्ट.कॉम

1
यदि आप स्ट्रिंग्स को समझते हैं तो घोषणा के समय आप char c[5] = "";खाली स्ट्रिंग को असाइन कर सकते हैं लेकिन char c = '';6 उत्तरों में बताए अनुसार मान्य नहीं है।
बृजेश चौहान

जवाबों:


132

आप उपयोग c[i]= '\0'या बस कर सकते हैं c[i] = (char) 0

अशक्त / खाली वर्ण केवल शून्य का मान है, लेकिन एक बच गए शून्य के साथ एक चरित्र के रूप में भी दर्शाया जा सकता है।


11
हां, और कोई "खाली चार" नहीं है। '\0'है अशक्त चार जिसके साथ कोई संबंध नहीं है NULL; अशक्त चार बस एक सांख्यिक कोड के रूप में 0 है।
लोरेंजो डोनाटी - कोडिडैक्ट.कॉम

@LorenzoDonati मैंने इसे अशक्त चरित्र के रूप में संदर्भित किया, खाली वर्ण केवल ओपी की शब्दावली का उपयोग करने के लिए था। मैंने यह भी स्पष्ट किया है कि मेरे संपादन में। चुक्स नोट के रूप में, NULL गैर-पॉइंटर संदर्भ सौदों के लिए बहुत अच्छा नहीं है इसलिए मैंने वह नोट भी बनाया है।
धनु राशि

1
@LorenzoDonati हाँ, मैंने इसे हटाने का फैसला किया है क्योंकि यह इस उत्तर के लिए कुछ भी नहीं जोड़ता है और हाथ पर चर्चा के लिए संदर्भ से बाहर लगता है।
धनु राशि

@ लोरेंजो डोनॉटी null charयह nul char एकल नहीं होना चाहिए l
बृजेश चौहान

2
खाली चरित्र जैसी कोई चीज नहीं है। नल चार को एक खाली चरित्र कहना केवल गलत है।
क्रिस्टोफर हैमरस्ट्रॉम्

28

आप एक चरित्र में "कोई चरित्र नहीं" स्टोर कर सकते हैं - इसका कोई मतलब नहीं है।

एक विकल्प के रूप में आप एक चरित्र को स्टोर कर सकते हैं जिसका आपके लिए एक विशेष अर्थ है - उदाहरण के लिए नल चार '\0'- और इसे विशेष रूप से व्यवहार करें।


5
मुझे लगता है कि यह स्वीकार किए गए एक से बेहतर उत्तर है, जो अशक्त चार और खाली चार को भ्रमित करता है। एक सादृश्य के रूप में, यह कहने जैसा है कि आप एक इंट की घोषणा नहीं कर सकते हैं और 'कोई संख्या नहीं' स्टोर कर सकते हैं - आपको कुछ मूल्य संग्रहीत करना होगा ।
सिमोनोव

4
आपके पास एक शून्य स्ट्रिंग ""हो सकती है क्योंकि एक स्ट्रिंग शून्य या अधिक वर्णों का एक अनुक्रम है, लेकिन एक चार बिल्कुल एक मूल्य है - शून्य नहीं और अधिक नहीं।
सिमोनोव


10

हां, c[i]=''एक वैध कोड नहीं है। हम कोष्ठक के बीच निरंतर चरित्र ' ', जैसे c[i] = 'A';चार A। लेकिन आप बीच में कोई चार नहीं लिखते हैं ''

खाली स्थान कुछ भी नहीं है, लेकिन मान लें कि यदि आपको स्थान आवंटित करना है तो करें:

यदि असाइन करना चाहते हैं nul charतो करें:

उदाहरण: मान लें कि यदि आपके पास c[]एक स्ट्रिंग है (एक स्ट्रिंग \0चार सरणी शून्य )। उदाहरण के लिए:

और आप जगह के साथ दूसरा चार जगह लेते हैं :

और यदि आप इसे प्रिंटफ का उपयोग करके प्रिंट करते हैं, तो निम्नानुसार है:

तब उत्पादन होगा:

और आप दूसरे वर्ण को '\ 0' से प्रतिस्थापित करते हैं :

तब उत्पादन होगा:

क्योंकि स्ट्रिंग के साथ समाप्त हो गया \0


क्या होगा अगर हमारे पास '0' के बाद कुछ अक्षर हैं। मेरा मतलब है कि हम स्ट्रिंग में एक चरित्र को निकालना चाहते हैं जैसे "नमूना" एम हटाएं। वहाँ सिर्फ एक तरीका है कि इसे कुछ काल्पनिक खाली चरित्र द्वारा प्रतिस्थापित करने के बजाय इसे वर्ण की बाईं शिफ्ट द्वारा हटाने के बजाय।
हिमांशु पोद्दार

5

"खाली चरित्र" जैसी कोई चीज नहीं है ''

यदि आपको एक अंतरिक्ष वर्ण की आवश्यकता है, जिसे एक स्थान के रूप में दर्शाया जा सकता है: c[i] = ' 'या इसके ASCII अष्टक समकक्ष के रूप में c[i] = '\040':। अगर आपको NUL कैरेक्टर चाहिए c[i] = '\0'


4

इस तथ्य का प्रतिनिधित्व करने के लिए कि मूल्य मौजूद नहीं है आपके पास दो विकल्प हैं:

1) यदि पूरी charरेंज सार्थक है और आप किसी भी मूल्य को आरक्षित नहीं कर सकते हैं, तो char*इसके बजाय का उपयोग करें char:

तब आपके पास तब होगा c[i] == NULLजब चरित्र मौजूद नहीं है और अन्यथा *c[i]सामान्य पात्रों के लिए है।

2) यदि आपको कुछ मूल्यों की आवश्यकता नहीं है, charतो प्रतिनिधित्व करने के लिए एक को आरक्षित करें जो कि मान मौजूद नहीं है, उदाहरण के लिए '\0'चरित्र।

तब आप के लिए होगा c[i] == '\0'जब चरित्र मौजूद नहीं है और सामान्य चरित्र अन्यथा।


3
प्रश्न को सी के साथ टैग किया गया है , न कि c ++
Spikatrix

@CoolGuy अच्छी बात है, आप सही कह रहे हैं। जवाब का बिंदु अभी भी खड़ा है, स्मृति आवंटन के तरीके से अमूर्त किया जाता है।
बार्टोज़केपी

4

एक ही निर्देश करने के दो तरीके हैं, यानी एक खाली स्ट्रिंग। पहला तरीका स्थिर मेमोरी पर एक खाली स्ट्रिंग आवंटित करना है:

या, यदि आप स्पष्ट होना चाहते हैं:

ऊपर पोस्ट किया गया तरीका केवल एक चरित्र के लिए है। और, दूसरा तरीका:

उपयोग करने के लिए मत भूलना मुक्त () क्योंकि यह एक साथ strdup () उपयोग malloc अंदर।


2

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

साथ में:

यह मानों के साथ आकार 8 की एक सरणी बनाता है:


0

String before = EMPTY_SPACE+TAB+"word"+TAB+EMPTY_SPACE;

जहाँ EMPTY_SPACE = "" (यह स्ट्रिंग है) TAB = '\ t' (यह अक्षर है)

String after = before.replaceAll(" ", "").replace('\t', '\0');

के बाद का अर्थ = "शब्द"

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.