2012-09-09 30 views
12

मैं एक printf() बयान का उपयोग कर बनाई निम्नलिखित उत्पादन:कैसे एक स्ट्रिंग शाब्दिक में दोहरे उद्धरण चिह्नों पाने के लिए?

printf("She said time flies like an arrow, but fruit flies like a banana."); 

लेकिन मैं डबल उद्धरण में वास्तविक उद्धरण रखना चाहते हैं, तो उत्पादन

उन्होंने कहा कि "समय एक तरह मक्खियों तीर, लेकिन फल केले की तरह उड़ता है "।

स्ट्रिंग printf() बयान में शाब्दिक रैप करने के लिए इस्तेमाल किया डबल उद्धरण में हस्तक्षेप किए बिना।

मैं यह कैसे कर सकता हूं?

उत्तर

41
उद्धरण भागने

बैकस्लैश के साथ:

printf("She said \"time flies like an arrow, but fruit flies like a banana\"."); 

विशेष escape characters कि आप स्ट्रिंग शाब्दिक में उपयोग कर सकते हैं कर रहे हैं, और इन एक अग्रणी बैकस्लैश के साथ चिह्नित हैं।

0

शुक्र है, सी ++ 11 के साथ कच्चे स्ट्रिंग अक्षर का उपयोग करने के लिए और अधिक सुखद दृष्टिकोण भी है।

printf("She said \"time flies like an arrow, but fruit flies like a banana\"."); 

बन जाता है:

printf(R"(She said "time flies like an arrow, but fruit flies like a banana".)"); 

कोष्ठक के अलावा उद्घाटन बोली के बाद, और समापन बोली से पहले के संबंध में, ध्यान दें कि वे अप करने के लिए 16 वर्णों के लगभग किसी भी संयोजन हो सकता है, से बचने में मदद स्थिति जहां संयोजन स्ट्रिंग में मौजूद है। विशेष रूप से:

को छोड़कर सेट बुनियादी स्रोत चरित्र के किसी भी सदस्य: अंतरिक्ष, छोड़ दिया कोष्ठक (, दायां कोष्ठक), बैकस्लैश \, और नियंत्रण क्षैतिज टैब, ऊर्ध्वाधर टैब का प्रतिनिधित्व अक्षर, प्रपत्र फ़ीड , और न्यू लाइन "(N3936 §2.14.5 [lex.string] व्याकरण) और" ज्यादा से ज्यादा 16 वर्णों "(§2.14.5/2)

यह कितना साफ बनाता है यह तुच्छ वाक्य यह बहस का मुद्दा हो सकता है , लेकिन जब HTML या JSON जैसे स्वरूपित तारों पर उपयोग किया जाता है, तो यह निर्विवाद रूप से बहुत स्पष्ट है।