2010-11-20 13 views
8
int main() 
{ 
     char *temp = "Paras"; 

     int i; 
     i=0; 

     temp[3]='F'; 

     for (i =0 ; i < 5 ; i++) 
       printf("%c\n", temp[i]); 

     return 0; 
} 

क्यों temp[3]='F';tempconst से सेगमेंटेशन गलती का कारण बन जाएगा?निम्नलिखित विभाजन विभाजन क्यों उत्पन्न करेगा?

+3

क्योंकि आपका सी/ओएस कार्यान्वयन उदार है और जब आप नाक पर राक्षसी ताकतों को स्वीकार करने के बजाय अपरिभाषित व्यवहार का आह्वान करते हैं तो प्रोग्राम को तुरंत समाप्त कर देते हैं। –

उत्तर

9

आपको स्ट्रिंग अक्षर को संशोधित करने की अनुमति नहीं है। (कभी कभी एक स्ट्रिंग शाब्दिक कहा जाता है - विशेष रूप से अन्य भाषाओं में)

+0

लेकिन 'temp'' const' – cse

+0

हाँ नहीं है। और मुझे लगता है कि संकलक आपको इसके बारे में चेतावनी देना चाहिए, लेकिन उदाहरण के लिए, जीसीसी नहीं है। किसी भी तरह से, मानक संकलक को स्ट्रिंग स्थिरांक को केवल स्मृति में पढ़ने की अनुमति देता है। –

+0

फिर क्यों 'चार अस्थायी [6] = "पारस";' काम करता है? – cse

0

* अस्थायी एक निरंतर के सूचक के रूप में परिभाषित किया गया है।

इसलिए त्रुटि के साथ लाइन इस स्थिरता के तीसरे चरित्र को बदलने की कोशिश कर रही है।

एक चार सरणी को परिभाषित करने और इसमें अस्थायी प्रतिलिपि बनाने के लिए स्ट्रैपी का उपयोग करने का प्रयास करें। फिर सरणी पर उपरोक्त कोड करें, इसे काम करना चाहिए। (खेद मेरी ipad यहाँ तो चलो इंटरफेस में कोड डालना पसंद नहीं करता है)

+2

मुझे एहसास पता है। मुझे लगता है कि एसओ डेवलपर्स को अस्थायी भविष्य के लिए आईपैड उपयोगकर्ताओं पर विचार करना चाहिए। –

0

आप देख सकते हैं, temp एक सूचक है, जो एक यादृच्छिक पते ओर इशारा करता है जहां मूल्य Paras बसता था साथ बेनाम सरणी। और वह सरणी एक स्ट्रिंग स्थिर है।

अपने कार्यक्रम काम करने के लिए के लिए, आप एक सूचक के बजाय एक सरणी उपयोग करने की आवश्यकता: अब

char temp[6] = "Paras"; 

आप सोच रहे हैं कि क्यों यह temp[6] बजाय temp[5] है, इसके बाद के संस्करण कोड एक स्ट्रिंग initializes, और पूरी तरह से अलग से:

char temp[5] = {'P', 'a', 'r', 'a', 's'}; 

स्ट्रिंग्स एक अशक्त टर्मिनेटर \0 के साथ समाप्त कर रहे हैं। और स्ट्रिंग प्रारंभ तरह होगा:

char temp[6] = {'P', 'a', 'r', 'a', 's', '\0'}; 
+4

बेहतर अभी भी, 'char temp [] = ', इसलिए संकलक लंबाई को आंकड़े बताते हैं। –

0
temp[3]='F'; 

इस लाइन correct.The "अस्थायी" स्थिरांक मान है नहीं है, तो आप इसे बदल नहीं सकते।