2012-10-02 14 views
12

कृपया निम्नलिखित ले:कई लाइनों पर एक स्ट्रिंग को परिभाषित करना

char buffer[512]; 

memset(buffer, 0, sizeof(buffer)); 
sprintf(&buffer[0],"This Is The Longest String In the World that in text goes on and.."); 

printf("Buffer:%s\r\n",buffer); 

मैं समस्या निवारण और संपादन में आसानी के लिए, कई लाइनों पर इस स्ट्रिंग बनाने में सक्षम हो करना चाहते हैं। हालांकि, जब मैं \ कमांड का उपयोग करता हूं तो मेरा आउटपुट टैब के रूप में दिखाई देता है?

उदाहरण:

Buffer:This Is The  Longest String In the World  that in text goes on and.. 

कोई भी विचार:

sprintf(&buffer[0],"This Is The\ 
    Longest String In the World\ 
    that in text goes on and.."); 

का उत्पादन पैदावार? क्या कोड की कई पंक्तियों में एक स्ट्रिंग को तोड़ने का प्रयास करने के लिए यह एक गलत तरीका है?

+0

आप पृथ्वी नहीं क्यों पर 'printf' –

+0

में' \ r' उपयोग नहीं करना चाहिए? – Mawg

+0

संभावित डुप्लिकेट [सी/उद्देश्य-सी में एकाधिक पंक्तियों में एक स्ट्रिंग अक्षर को कैसे विभाजित करें?] (Http://stackoverflow.com/questions/797318/how-to-split-a-string-literal-across-multiple -लाइन-इन-सी-उद्देश्य-सी) –

उत्तर

19

न्यूलाइन निरंतरता कोड के भीतर किसी भी व्हाइटस्पेस को ध्यान में रखती है।

आप बेहतर पठनीयता के लिए स्ट्रिंग शाब्दिक संयोजन का लाभ ले सकते:

sprintf(buffer, "This Is The " 
       "Longest String In the World " 
       "that in text goes on and.."); 

\ का उपयोग करके आप स्तंभ 0 पर अपने स्ट्रिंग की निरंतरता शुरू करने की आवश्यकता होगी:

sprintf(buffer, "This Is The \ 
Longest String In the World \ 
that in text goes on and.."); 
+1

फोरहेड थप्पड़ मारा गया। ऑटो-टैबबिंग ने मुझे किया है! इसे इंगित करने के लिए धन्यवाद, यह वास्तव में मुद्दा था। – Nanomurf

4

यह भी होगा बस साथ ही काम करें:

char buffer[512]; 
sprintf(&buffer[0], "This is the longest string" 
     "in the world that in text" 
     "goes on and on and on and on ...."); 
printf("%s\n", buffer); 
+0

धन्यवाद, मुझे एहसास नहीं हुआ कि यह भी काम करेगा। – Nanomurf

8

हालांकि यह मी मैं पैडेंटिक प्रतीत होता हूं, मुझे दो अन्य पोस्ट उत्तरों के साथ निम्नलिखित मुद्दों के लिए असली दुनिया में पर्याप्त समय काट दिया गया है।

  • दो पोस्ट जवाब उपेक्षा अलग स्ट्रिंग शाब्दिक में शामिल होने (स्पष्ट है, पहली परीक्षा के बाद) शब्दों के बीच स्पेस देने के लिए।

  • यदि आपका स्ट्रिंग वास्तव में लंबा है, snprintf() बजाय का उपयोग करें - यह थोड़ा clumsier है, लेकिन यह अपने कोड की समीक्षा किसी को भी है कि आप कोड रखरखाव में आम खतरों के बारे में जानते हैं बताता है।

  • यदि आपकी स्ट्रिंग में % शामिल होता है, तो आपको एक कंपाइलर चेतावनी (अच्छा) या यादृच्छिक विभाजन दोष (खराब) मिल जाएगा। तो में इस मामले "%s" का उपयोग करें या, शायद, बस strcpy(). (दो महीने का समय में, एक सह कार्यकर्ता आसानी से 99.9% संदेश को जोड़ सकते हैं।)

  • memset(), जो मैं अक्सर देखते हैं, का उपयोग सिर्फ माल है -कल्ट प्रोग्रामिंग। हां, विशेष मामलों में किसी को इसकी आवश्यकता होती है, लेकिन का उपयोग करके यह हर समय गलत संदेश भेजता है।

  • और अंततः, &buffer[0] का उपयोग क्यों करेगा जब buffer करेगा?

तो संक्षेप में प्रस्तुत करने के लिए, अपने कोड शायद पढ़ना चाहिए:

char buffer[512]; 
snprintf(buffer, sizeof buffer, "%s", 
    "This is The Longest String " 
    "In the World that in text " 
    "goes on and on and on and on ...."); 
printf("Buffer:%s\r\n", buffer); 
+1

ये सभी बहुत अच्छे मुद्दे हैं। उन्हें बनाने के लिए समय लेने के लिए धन्यवाद। उपर्युक्त कोड वास्तव में केवल एक उदाहरण है जिसका मैं सामना कर रहा हूं, लेकिन यहां सूचीबद्ध सभी बिंदु बहुत मान्य हैं। और अपने अंतिम प्रश्न का उत्तर देने के लिए: मैं एक सुरुचिपूर्ण प्रोग्रामर नहीं हूं, इसलिए अक्सर ब्रूट फोर्स पर भरोसा करता हूं। ><मैं प्रतिक्रिया की सराहना करता हूं! – Nanomurf

+0

@ जोसेफ क्विंसेसी मुझे नहीं लगता था कि यह जरूरी था, भले ही आपने मेरे जवाब में कमियों पर मेरा ध्यान खींचा। इस साइट पर लक्ष्य अच्छे प्रश्न और उत्तर हैं, और प्रत्येक को इसके योग्यता पर खड़ा होना चाहिए, भले ही इसका मतलब अन्य उत्तरों के उपयोगी टुकड़ों को संश्लेषित करना है, और मैं अक्सर अन्य उपयोगकर्ताओं को उद्धृत नहीं करता हूं। ऐसा कहकर, आपकी टिप्पणी से इनपुट मेरे लिए भी उपयोगी है, और मैं क्षमा चाहता हूं। – pb2q

+0

@ pb2q: आपकी बहुत ही शानदार प्रतिक्रिया के लिए धन्यवाद। –

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