एक char * मूल रूप से एक चरित्र के लिए एक सूचक है। सी सी अक्सर इस सूचक को किसी सरणी में पहले वर्ण को इंगित करता है।
एक std :: स्ट्रिंग एक कक्षा है जो एक वेक्टर की तरह है।आंतरिक रूप से, यह वर्णों की एक सरणी के भंडारण को संभालता है, और उपयोगकर्ता को कई सदस्य फ़ंक्शंस को संग्रहीत सरणी के साथ-साथ कई अधिभारित ऑपरेटरों में हेरफेर करने देता है।
Much more intuitive to use.
Better searching, replacement, and manipulation functions.
Reduced risk of segmentation faults.
उदाहरण::
एक चार * पर एक std :: स्ट्रिंग का उपयोग करना
C backwards-compatibility.
Performance (potentially).
char*s have lower-level access.
कारण:
कारण एक std :: स्ट्रिंग के ऊपर एक चार * उपयोग करने के लिए char * को किसी भी सरणी के साथ या गतिशील रूप से आवंटित चार सरणी के साथ संयोजन में उपयोग किया जाना चाहिए। आखिरकार, एक पॉइंटर बेकार है जब तक कि यह वास्तव में कुछ इंगित नहीं करता है। यह मुख्य रूप से सी कार्यक्रमों में प्रयोग किया जाता है:
char somebuffer[100] = "a string";
char* ptr = somebuffer; // ptr now points to somebuffer
cout << ptr; // prints "a string"
somebuffer[0] = 'b'; // change somebuffer
cout << ptr; // prints "b string"
सूचना है कि जब आप 'somebuffer' बदलने के लिए, 'ptr' भी बदल जाता है। ऐसा इसलिए है क्योंकि इस मामले में कुछ बफर वास्तविक स्ट्रिंग है। पीआरटी बस अंक/इसे संदर्भित करता है।
std :: स्ट्रिंग के साथ यह कम अजीब है: यहाँ
std::string a = "a string";
std::string b = a;
cout << b; // prints "a string"
a[0] = 'b'; // change 'a'
cout << b; // prints "a string" (not "b string")
, आपको लगता है कि बदलते देख सकते हैं 'एक', 'बी' को प्रभावित नहीं करता है क्योंकि 'बी' वास्तविक स्ट्रिंग है।
लेकिन वास्तव में, मुख्य अंतर यह है कि चार सरणी के साथ, आप स्मृति के प्रबंधन के लिए ज़िम्मेदार हैं, जबकि std :: string यह आपके लिए करता है। सी ++ में तारों पर चार सरणी का उपयोग करने के बहुत कम कारण हैं। 100 में से 99 बार आप स्ट्रिंग के साथ बेहतर हो जाते हैं।
जब तक आप स्मृति प्रबंधन और पॉइंटर्स को पूरी तरह से समझ नहीं लेते, बस अपने आप को कुछ सिरदर्द बचाएं और std :: string का उपयोग करें।
मैं इस [सी ++ - फैक] (http://stackoverflow.com/questions/tagged/c%2b%2b-faq) को टैग करने की योजना बना रहा हूं और [सी ++ लाउंज] (http: // चैट में इसकी चर्चा करूंगा) जल्द ही .stackoverflow.com/कमरे/10/लाउंजक)। –
यह अभी भी 2012 में पूछा जा रहा है ?! साथ ही, 'std :: string' का उपयोग करने की सलाह कब ** ** ** तर्कसंगतता के साथ नहीं है? –
@ karlKnechtel: क्षमा करें, लगता है कि मैं आपके विपरीत एक सी ++ नौसिखिया हूं :) हालांकि, मैं टिप्पणी करने से पहले शीर्षक पढ़ने के बजाय पूरे प्रश्न को पढ़ने और इसके पीछे के उद्देश्य को समझने के लिए परेशान होगा। –