2013-05-11 7 views
5

क्यों कार्यक्रम,सी में चार संकेत ++

char *s, *p, c; 

s = "abc"; 

printf(" Element 1 pointed to by S is '%c'\n", *s); 
printf(" Element 2 pointed to by S is '%c'\n", *s+1); 
printf(" Element 3 pointed to by S is '%c'\n", *s+2); 
printf(" Element 4 pointed to by S is '%c'\n", *s+3); 
printf(" Element 5 pointed to by S is '%c'\n", s[3]); 
printf(" Element 4 pointed to by S is '%c'\n", *s+4); 

निम्न परिणाम देता है Incrementing?

Element 1 pointed to by S is 'a' 
Element 2 pointed to by S is 'b' 
Element 3 pointed to by S is 'c' 
Element 4 pointed to by S is 'd' 
Element 5 pointed to by S is ' ' 
Element 4 pointed to by S is 'e' 

संकलक अनुक्रम जारी कैसे किया? और s[3] क्यों एक खाली मूल्य लौटाता है?

+5

प्राथमिकता। आप '* (एस + 1)' आदि चाहते हैं लेकिन '* (एस + 4) 'अपरिभाषित व्यवहार होगा। –

+0

'[3] '4 वें चरित्र को लौटाता है (उन्हें 0 से अनुक्रमित किया जाता है), जो एक स्ट्रिंग को' \ 0' वर्ण समाप्त कर रहा है। –

+0

's [3]' '' 0' है, इसलिए यह कोई भी –

उत्तर

9

यह अनुक्रम जारी नहीं रखता है। आप *s+3 कर रहे हैं जो पहले s को char मूल्य 'a' के साथ देने के लिए पहले संदर्भित करता है, और फिर आप उस char मान पर जोड़ रहे हैं। 3 से 'a' जोड़ना आपको 'd' (कम से कम आपके निष्पादन चरित्र सेट में) का मान देता है।

यदि आप उन्हें *(s+1) पर बदलते हैं और इसी तरह, आपको अपरिभाषित व्यवहार की उम्मीद है।

s[3] स्ट्रिंग के अंतिम तत्व को प्राप्त करता है जो शून्य वर्ण है।

+0

इसे मिला! धन्यवाद! – zalyahya

+5

एक टिप - '" abc "' अक्सर एक अच्छी टेस्ट स्ट्रिंग नहीं है - गलत कोड से आकस्मिक रूप से अपेक्षित परिणाम (या कुछ भ्रमित रूप से बंद) प्राप्त करना बहुत आसान है। – Steve314

2

ध्यान दें कि *s एक चरित्र है, जो अनिवार्य रूप से एक संख्या है। इसमें एक और नंबर जोड़ना, उच्च एएससीआईआई मूल्य वाले चरित्र में परिणाम। s[3] खाली है, क्योंकि आपने क्रमशः 0,1,2 प्रविष्टियों के लिए "abc" असाइन किया है। वास्तव में तीसरा चरित्र '\ 0' चरित्र है।

संबंधित मुद्दे