2012-09-20 17 views
18

मैं स्ट्रिंग अक्षर के डेटाटाइप के बारे में उलझन में हूं। क्या यह const char * या const char है? अंतर्दृष्टि की सराहना की जाती है। धन्यवादसी ++ स्ट्रिंग शाब्दिक के डेटाटाइप क्या है?

+0

इसी तरह के प्रश्न के लिए मेरा उत्तर http://stackoverflow.com/questions/12451496/what-is-the-data-type-for-a-string/12452097#12452097 देखें। – PiotrNycz

+11

जिन लोगों के पास यह गलत है (इसकी कॉन्स char * सोच रहा है) की संख्या से निर्णय लेना मैं यह देखने में असफल रहा कि यह क्यों नीचे मतदान किया जा रहा है। स्पष्ट रूप से यह एक बहुत अच्छा सवाल है जब आधे उत्तरदाताओं को जवाब नहीं पता है। – WhozCraig

+5

@ क्रिएगेलसन, मैंने देखा है कि 10 के के प्रतिनिधि के साथ बहुत से लोग आखिरी बार गलत हो जाते हैं। – chris

उत्तर

25

यह एक const char[N] है (जो है एक ही बातchar const[N] के रूप में), जहां N स्ट्रिंग की लंबाई के साथ साथ समाप्त NUL के लिए एक (या बस स्ट्रिंग की लंबाई अगर आप एक की लंबाई को परिभाषित "है स्ट्रिंग "जैसा कि पहले से ही NUL समेत है)।

यही कारण है कि आप स्ट्रिंग में वर्णों की संख्या प्राप्त करने के लिए sizeof("hello") - 1 कर सकते हैं (किसी भी एम्बेडेड NUL एस सहित); यदि यह एक सूचक था, तो यह काम नहीं करेगा क्योंकि यह हमेशा आपके सिस्टम पर सूचक का आकार होगा (शून्य से एक)।

+6

इसे वापस करने के लिए, * एक संकीर्ण स्ट्रिंग शाब्दिक में "एन कॉन्स्ट चार का सरणी" टाइप किया गया है, जहां n नीचे की गई स्ट्रिंग का आकार है, और स्थैतिक संग्रहण अवधि (3.7) है। * – chris

+1

डाउनवॉटर टिप्पणी करने की देखभाल ? –

+0

नहीं I. महाकाव्य झुकाव देखने के बाद मैंने इस प्रश्न पर उदारता से वोट व्यक्त किए हैं। जवाब, ठीक है, यह एक और कहानी है .. =) – WhozCraig

7

"Hello world"const char[12] (ग्यारह वर्ण प्लस '\0' टर्मिनेटर) है।

L"Hello world"const wchar_t[12] है।

और चूंकि सी ++ 14, "Hello world"sstd::string है।

इसके अलावा u8"", u"" और U"" स्ट्रिंग शाब्दिक द्वारा सी ++ 11 जोड़ा अंकन, जो UTF-8, UTF-16 और UTF-32 एन्कोडिंग क्रमशः निर्दिष्ट करते हैं, ध्यान दें। गैर-योग्य स्ट्रिंग अक्षरों का एन्कोडिंग (यानी "" और L"") कार्यान्वयन-परिभाषित (और हमेशा था) है।