2012-08-25 14 views
18
char* a="dsa" "qwe"; 
printf("%s",a); 

उत्पादन: dsaqweदो स्ट्रिंग अक्षरों का संयोजन कैसे काम करता है?

मेरा प्रश्न क्यों इस बात काम करता है। अगर मैं दो स्ट्रिंग अक्षर के बीच एक जगह या कुछ भी नहीं देता तो यह स्ट्रिंग अक्षर को जोड़ता है।

यह कैसे काम कर रहा है?

+0

कृपया प्रश्न शीर्षक में कुछ वास्तविक रखें। मैंने इसे आपके लिए संपादित किया है, कृपया देखें कि यह फिट बैठता है या नहीं। –

उत्तर

23

यह आईएसओ सी मानक द्वारा परिभाषित किया गया है, आसन्न स्ट्रिंग अक्षर एक ही में संयुक्त होते हैं।

भाषा एक छोटे से सूखी लेकिन खंड सी 11 के 6.4.5 String literals कहा गया है (यह सब के बाद एक मानक है) है:

अनुवाद चरण 6 में, multibyte चरित्र दृश्यों आसन्न चरित्र और हूबहू के किसी भी क्रम द्वारा निर्दिष्ट -prefixed विस्तृत स्ट्रिंग शाब्दिक टोकन एक एकल multibyte चरित्र अनुक्रम में concatenated हैं।

यह भी 5.1.1.2 Translation phases, point 6 में बताया गया है, एक छोटे से अधिक संक्षेप:

सटे स्ट्रिंग शाब्दिक टोकन श्रेणीबद्ध कर रहे हैं।

इसका मूल रूप से अर्थ है कि "abc" "def""abcdef" से अलग नहीं है।

यह अक्सर लंबे तार बनाने, जबकि अभी भी अच्छा स्वरूपण होने के लिए उपयोगी होता है:

char *myString = "This is a really long " 
       "string and I don't want " 
       "to make my lines in the " 
       "editor too long, because " 
       "I'm basically anal retentive :-)"; 
+0

विवरण के लिए स्टिकर होने के साथ कुछ भी गलत नहीं है। –

6

आपने अपने प्रश्न का उत्तर दिया।

यदि मैं दो स्ट्रिंग अक्षरों के बीच एक स्थान या कुछ भी नहीं देता तो यह स्ट्रिंग अक्षर को जोड़ता है।

यह सी वाक्यविन्यास की विशेषताओं में से एक है।

-4

मुझे यकीन है कि यह एक कंपाइलर सुविधा है।

+2

एक कंपाइलर सुविधा नहीं है, यह एक आईएसओ मानक है। –

+0

... और इस तरह, यह संकलक में बनाया गया है। तो यह एक कंपाइलर सुविधा है। –

+0

कृपया स्वीकृत उत्तर देखें। और किसी को भी गुमराह मत करो। आपको कंपाइलर्स के बारे में कुछ पढ़ना चाहिए और अपनी शब्दावली की जांच करनी चाहिए। –

1

आईएसओ सी मानक §5.1.1.2 कहते हैं: -

  1. सटे स्ट्रिंग शाब्दिक टोकन श्रेणीबद्ध कर रहे हैं।
  2. टोकन को अलग करने वाले व्हाइट-स्पेस वर्ण अब महत्वपूर्ण नहीं हैं।
+0

असल में, दूसरा चरण एक चरण 7 गतिविधि है, चरण 6 में आसन्न स्ट्रिंग अक्षर के संयोजन के बाद _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ हालांकि, पहले के लिए +1। – paxdiablo

3

और अपने अनस्कोधित प्रश्न का उत्तर देने के लिए, "यह अच्छा क्या है?"

एक बात के लिए, आप स्ट्रिंग अक्षर में स्थिरांक डाल सकते हैं। आप

#define FIRST "John" 
#define LAST "Doe" 

const char* name = FIRST " " LAST; 
const char* salutation = "Dear " FIRST ","; 

और फिर यदि आपको बाद में नाम बदलने की आवश्यकता होगी, तो आपको केवल इसे एक स्थान में बदलना होगा।
इस तरह की चीजें।

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