जैसा कि अन्य लोगों ने उल्लेख किया है, क्या निरंतर तारों की सामग्री केवल पढ़ने वाली स्मृति में संग्रहीत होती है ऑपरेटिंग द्वारा निर्धारित की जाती है प्रणाली, कंपाइलर, और चिप वास्तुकला।
अधिक सटीक रूप से, सी मानक निर्दिष्ट करता है कि उद्धृत तारों को "कॉन्स्ट char []" प्रकार (या उस प्रभाव के लिए शब्द, मेरे पास मानक नहीं है) माना जाता है।
कोई भी कोड जो इस तरह की स्ट्रिंग की सामग्री को संशोधित करने का प्रयास करता है, वह अनिर्धारित व्यवहार का आह्वान कर रहा है। इसका मतलब है कि उस बिंदु पर सचमुच कुछ भी हो सकता है, और संकलक के प्रदाता को यह भी दस्तावेज करने की आवश्यकता नहीं है कि क्या हो सकता है।
प्रैक्टिस में, इसका मतलब है कि एक सी या सी ++ प्रोग्राम जो पोर्टेबल बनना चाहता है उसे निरंतर तारों को संशोधित करने से बचना है।
सामान्य रूप से, कंपाइलर आपको "कॉन्स्ट" चर की सामग्री को संशोधित करने की अनुमति नहीं देगा, इसलिए आप ज्यादातर मामलों में "केवल" का अर्थ "कॉन्स्ट" मान सकते हैं। दुर्भाग्यवश, ऐतिहासिक कारणों से मुख्य रूप से char * और const char * के लिए एक विशेष अपवाद है।
char *x = "Hello, World";
*x = 'h';
, त्रुटि या चेतावनी के बिना संकलित कर देगा, भले ही यह अपरिभाषित व्यवहार का आह्वान: यह इस तरह है कि कोड का मतलब है।
स्रोत
2009-11-10 01:19:26
आप एक संदर्भ है? मुझे लगता है कि आपका मतलब हो सकता है: const char * s = "हैलो वर्ल्ड"। –
यह स्पष्ट नहीं है कि सभी प्रोसेसर आर्किटेक्चर सुरक्षित स्मृति का समर्थन करते हैं। – jldupont
@ जेम्स ब्लैक: ओपी स्पष्ट रूप से स्ट्रिंग शाब्दिक 'हैलो वर्ल्ड "के बारे में बात कर रहा है, जिसे वास्तव में केवल पढ़ने योग्य स्मृति में संग्रहीत किया जा सकता है, भले ही पॉइंटर घोषित किया जाए। – AnT