आप कर सकते हैं:
const char* yo2 = (char [4]) { 'a', 'b', 'c', '\0' };
जो वैध है और प्राप्त करेंगे आप क्या चाहते हैं। ध्यान दें कि यह के बराबर नहीं है:
const char* yo2 = "abc":
पूर्व स्थिति में, जब yo2
फ़ाइल दायरे में घोषित किया जाता है: यौगिक शाब्दिक सरणी स्थिर भंडारण अवधि है, लेकिन जब yo2
ब्लॉक गुंजाइश पर घोषित किया जाता है यौगिक शाब्दिक है स्वचालित भंडारण अवधि।
बाद के मामले में, "abc"
एक स्ट्रिंग अक्षर है और स्थिर भंडारण अवधि (फ़ाइल स्कोप या ब्लॉक स्कोप) है।
const char yo2[] = { 'a', 'b', 'c', '\0' };
अपने उदाहरण के बारे में:
तुम भी एक सूचक के बजाय एक सरणी का उपयोग कर सकते हैं। सी में:
const char* yo2 = { 'a', 'b', 'c', '\0' };
मान्य नहीं है और अपने संकलक के रूप में यह व्याख्या:
const char* yo2 = (char *) 'a';
'a'
का मूल्य एक सूचक मूल्य (पता) तो अपसंदर्भन yo2
अपरिभाषित व्यवहार का आह्वान नहीं है।
नहीं! आरएचएस एक अस्थायी है; यह चारों ओर छड़ी की गारंटी नहीं है। – nneonneo
@nneonneo यह एक यौगिक शाब्दिक है। ब्लॉक स्कोप पर घोषित होने पर इसकी स्वचालित संग्रहण अवधि होती है। अब डाउनवोट क्यों? – ouah
सी में, हां। लेकिन जैसे ही आप इसे C++ में उपयोग करते हैं, या इसे C++ मोड में संकलित करते हैं, यह असुरक्षित हो जाता है। तो यह मेरी किताबों में एक सुरक्षित अभ्यास नहीं है। – nneonneo