मेरे कोड इस तरह है:संशोधन करना एक C++ स्ट्रिंग वस्तु की मूल चार सरणी
string s="abc";
char* pc = const_cast<char*>(s.c_str());
pc[1]='x';
cout << s << endl;
जब मैं जीसीसी का उपयोग करके उपरोक्त टुकड़ा संकलित, मैं परिणाम "AXC" मिल गया के रूप में उम्मीद। मेरा सवाल यह है कि, इस तरह से एक सी ++ स्ट्रिंग के अंतर्निहित चार सरणी को संशोधित करने के लिए सुरक्षित और पोर्टेबल है? या सीधे स्ट्रिंग के डेटा में हेरफेर करने के लिए वैकल्पिक दृष्टिकोण हो सकते हैं?
एफवाईआई, मेरा इरादा कुछ शुद्ध सी कार्यों को लिखना है जिन्हें सी और सी ++ दोनों कहा जा सकता है, इसलिए वे केवल char * को तर्क के रूप में स्वीकार कर सकते हैं। Char * से स्ट्रिंग तक, मुझे पता है कि इसमें प्रतिलिपि बनाने की प्रतिलिपि है, जुर्माना प्रतिकूल है। तो, क्या कोई इस तरह की स्थिति से निपटने के लिए कुछ सुझाव दे सकता है।
तो, सुरक्षित और आसान है [0] सुरक्षित तरीका? – Need4Steed
@ Need4Steed: क्रमबद्ध करें। सी ++ 98/सी ++ 03 में, स्ट्रिंग सामग्री को तकनीकी रूप से संगत होने की गारंटी नहीं दी जाती है ... हालांकि, मानक में एक बग का मतलब है कि सभी मुख्यधारा के कार्यान्वयन _do_ इसे किसी भी तरह से संगत बनाते हैं, और इसे सी में मानक बनाया गया था ++ 0x। (सावधान रहें कि आपके द्वारा प्राप्त सूचक _not_ को शून्य-समाप्ति वाले चार सरणी पर इंगित करता है, इसलिए आपको भी लंबाई को पारित करना होगा।) –
हां, नवीनतम मानकों के साथ। और वहां कोई ज्ञात कार्यान्वयन नहीं है जहां यह नहीं है। हालांकि आरक्षित लंबाई को खत्म नहीं करने के लिए सावधान रहें। – Coder