संपादित करें: ओपी (या एक संपादक) ने चुपचाप मूल प्रश्न के कुछ उद्धरणों में से कुछ को बदल दिया जब मैंने यह उत्तर प्रदान करने के बाद कुछ बिंदुओं पर दोहरे उद्धरण चिह्नों को बदल दिया।
आपके कोड का परिणाम संकलक त्रुटियों में होगा। आपका पहला कोड टुकड़ा:
char buf[10] ; buf = ''
दोगुना अवैध है। सबसे पहले, सी में, खाली जैसी कोई चीज नहीं है char
। आप एक रिक्त स्ट्रिंग को नामित करने के लिए दोहरे उद्धरण चिह्नों का उपयोग कर सकते हैं:
char* buf = "";
यह आपको एक NUL
स्ट्रिंग को एक पॉइंटर देगा , यानी एक एकल-वर्ण स्ट्रिंग जिसमें केवल NUL
चरित्र होगा। लेकिन आप उनके अंदर कुछ भी नहीं के साथ एकल उद्धरण का उपयोग नहीं कर सकते हैं - जो अपरिभाषित है। यदि आपको NUL
चरित्र निर्दिष्ट करने की आवश्यकता है , तो आपको इसे निर्दिष्ट करना होगा:
char buf = '\0';
चरित्र से विमुख करने के लिए बैकस्लैश आवश्यक है '0'
।
char buf = 0;
एक ही बात को पूरा करता है, लेकिन पूर्व पढ़ने के लिए कम अस्पष्ट है, मुझे लगता है।
दूसरे, जब आप परिभाषित किए गए हैं, तो आप सरणियों को प्रारंभ नहीं कर सकते।
char buf[10];
ऐरे को घोषित करता है और परिभाषित करता है। सरणी पहचानकर्ता buf
अब मेमोरी में एक पता है, और आप buf
असाइनमेंट के माध्यम से अंक नहीं बदल सकते हैं । इसलिए
buf = // anything on RHS
गैरकानूनी है। आपके दूसरे और तीसरे कोड के टुकड़े इस कारण से अवैध हैं।
किसी सरणी को आरंभ करने के लिए, आपको इसे परिभाषा के समय करना होगा:
char buf [10] = ' ';
आपको पहले वर्ण के साथ एक 10-वर्ण सरणी देगा जिसमें अंतरिक्ष '\040'
और शेष जा रहा है NUL
, अर्थात '\0'
। जब किसी ऐरे को घोषित किया जाता है और उसे इनिशियलाइज़र के साथ परिभाषित किया जाता है, तो एलीमेंट एलिमेंट्स (यदि कोई हो) को निर्दिष्ट इनिशियल वैल्यूज़ के साथ अतीत में स्वचालित रूप से पॉड किया जाता है 0
। कोई भी "यादृच्छिक सामग्री" नहीं होगी।
यदि आप ऐरे को घोषित करते हैं और परिभाषित करते हैं, लेकिन इसे प्रारंभ नहीं करते हैं, जैसा कि निम्नलिखित में है:
char buf [10];
आपके पास सभी तत्वों में यादृच्छिक सामग्री होगी।