2013-01-23 13 views
12

मुझे CStrings का उपयोग करके कुछ कोड क्यों दिखाई दे रहा है।`सीएसटींग` क्या है?

कुछ उपयोग इस प्रारूप

char a_c_string []; 

जबकि अन्य

CString another_c_string; 

वहाँ एक अंतर है का उपयोग करें? CStrings पर मिले सभी संदर्भों ने इसे पहले उदाहरण में घोषित किया है, मैंने केवल फ़ोरम पर अन्य तरीकों को देखा है और जैसे लोग उदाहरण दे रहे हैं।

+0

सीएसटींग एक माइक्रोसॉफ्ट घृणा है, नहीं? –

+12

नहीं, घृणा नहीं, इसने अतीत में हजारों कार्यक्रमों को लिखने में मदद की है। क्षमा करें, लेकिन अपरिवर्तित एमएस-बैशिंग राशन या विकल्पों के बिना लंगड़ा है। –

+0

'CString' किसी भी भाषा में मौजूद नहीं है जिसका मैंने कभी भी उपयोग किया है। यह कहां से आया? कृपया सी या सी ++ में से एक चुनें (फिर इस तरह टैग करें), फिर हमें बताएं कि कौन सी भाषा 'सीएसटींग' है) (फिर इस तरह टैग करें)। –

उत्तर

19

CString न तो एक सी है और न ही एक सी ++ प्रकार है। It appears to be a Microsoft invention अनिवार्य रूप से एक विकल्प है कि std::string रहे हैं:

  • CString वस्तुओं संयोजन के संचालन का एक परिणाम के रूप में विकसित कर सकते हैं।
  • CString ऑब्जेक्ट्स "वैल्यू सेमेन्टिक्स" का पालन करें। CString ऑब्जेक्ट को वास्तविक स्ट्रिंग के रूप में सोचें, स्ट्रिंग के पॉइंटर के रूप में नहीं।
  • आप वस्तुओं को const char* और LPCTSTR फ़ंक्शन तर्कों के लिए स्वतंत्र रूप से प्रतिस्थापित कर सकते हैं।
  • एक रूपांतरण ऑपरेटर स्ट्रिंग के पात्रों को केवल पढ़ने-योग्य सरणी वर्णों (सी-स्टाइल स्ट्रिंग) के रूप में सीधे पहुंच प्रदान करता है।

मैं इसे अनदेखी की सलाह देते हैं, ताकि:

(क) लोगों को पता है कि तुम क्या बारे में बात कर रहे हैं;
(बी) आपका कोड पोर्टेबल है;
(सी) आप सी ++ लिख रहे हैं कि हर कोई दुनिया भर में स्वीकृत आईएसओ सी ++ मानक के अनुसार तर्कसंगत हो सकता है कि बहुत से लोग इस व्यक्त उद्देश्य के लिए बहस करते हुए कई घंटे बिताते हैं (यानी, कुछ लोगों के विपरीत में एक कमरे में एक कंपनी का कार्यालय)।

यह केवल तभी उपलब्ध होगा जब आप माइक्रोसॉफ्ट विजुअल सी ++ के साथ प्रोग्रामिंग कर रहे हों, जो काफी सीमित है।

+2

सकारात्मक तरफ, 'std :: string' इन सभी चीजों को करता है, सिंक char * '/' LPCSTLSKJ' में कनवर्ट करने के अलावा, जिसके लिए आप बस' my_str.c_str() 'कहते हैं। – Potatoswatter

+0

@Potatoswatter: और [यह वास्तव में एक _good_ बात है कि यह अंतर्निहित नहीं है] (http://stackoverflow.com/questions/492061/why-doesnt-stdstring-provide-implicit-conversion-to-char)। हालांकि, कोई आश्चर्य नहीं कि माइक्रोसॉफ्ट ने उस पर सम्मेलन तोड़ने का फैसला किया; यह उनके एमओ, innit है। –

+0

जैसा कि मैं केवल लिनक्स चलाता हूं और विजुअल सी ++ तक पहुंच नहीं है, यह मेरे लिए बहुत कम उपयोग है, लेकिन मैंने इसे सी/सी ++ में स्ट्रिंग प्रोसेसिंग और सीस्ट्रिंग बनाम स्ट्रिंग ऑब्जेक्ट का उपयोग करने की योग्यता के दौरान कुछ कोड उदाहरणों में देखा है । उत्तर – user1768079

0

CStringविज़ुअल सी ++ में उपयोग किया जाता है।

विजुअल C++ माइक्रोसॉफ्ट के के कार्यान्वयन है सी ++

+0

सी ++ के कार्यान्वयन सी ++ के कार्यान्वयन हैं। इसका मतलब है कि उनमें यादृच्छिक अतिरिक्त प्रतीक नहीं हैं। 'सीएसटींग', अगर आप सुझाव देते हैं, तो माइक्रोसॉफ्ट _extension to_ C++ है। –

+0

@ गैर-स्टॉपटाइम ट्रेवल: यह एक एक्सटेंशन नहीं है - इसमें केवल एक अतिरिक्त कक्षा शामिल है। –

+0

@ जेरीकॉफिन: और भेद ..... है? –

7

शायद ज़रुरत भ्रम का कारण है कि में: "सी" "cstring" में सिर्फ एक उपसर्ग है MFC से सभी वर्गों है। एमएफसी Win32 एपीआई लपेटकर माइक्रोसॉफ्ट द्वारा सी ++ लाइब्रेरी है। इस स्ट्रिंग क्लास को "सी स्ट्रिंग्स" के साथ बहुत कम करना है, जिसका उपयोग सी भाषा प्रदान करने वाली स्ट्रिंग-हैंडलिंग सुविधाओं का वर्णन करने के लिए किया जाता है। सी भाषा केवल स्ट्रिंग हैंडलिंग के लिए फ़ंक्शंस प्रदान करती है जो स्ट्रिंग का प्रतिनिधित्व करने वाले चार सरणी में पॉइंटर पर काम करती हैं और उन्हें आवश्यकता होती है कि अंतिम वर्ण एक एनयूएल (उर्फ एनयूएल-टर्मिनेटेड या शून्य-समाप्त) है। ध्यान दें कि सी ++ में भी एक स्ट्रिंग क्लास std::string है (ठीक है, वास्तव में std :: wstring और std :: basic_string टेम्पलेट भी है, लेकिन शुरुआत के रूप में आप उनको सुरक्षित रूप से अनदेखा कर सकते हैं)।

17

कई जीयूआई ढांचे के पास अपनी स्वयं की स्ट्रिंग क्लास है। उदा। क्यूटी में QString है, wxwindows में wxString है। इस मामले में एमएफसी में सीएसटींग है। यह तब सुविधाजनक है और एमएफसी गुई कोड के संदर्भ में सीएसटींग का उपयोग करने के लिए समझ में आता है क्योंकि तब आप विजुअल सी ++ पर पहले से ही निर्भर हैं और कोड पोर्टेबिलिटी पर विचार नहीं किया जाएगा। मैं इसे अनदेखा करने के लिए कंबल बयान से सावधान रहूंगा क्योंकि यह गैर मानक है - यह सब संदर्भ पर निर्भर करता है।

+1

मुझे पूरा यकीन है कि "सीएसटींग'" में "सी" "कक्षा" के लिए खड़ा है। –

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