मैं एक स्ट्रिंग क्लास लिख रहा हूं जो होमवर्क असाइनमेंट के लिए std :: string के समान है, लेकिन मैं यह नहीं समझ सकता कि सी-स्ट्रिंग को वापस कैसे किया जाए जो स्मृति रिसाव का कारण नहीं बनता है और इसे तब तक रहने की गारंटी है अब उपयोग में नहीं है। मेरे पास वर्तमान में है:std :: string :: c_str() एक सी-स्ट्रिंग कैसे लौटाता है जो स्मृति रिसाव या अपरिभाषित सी-स्ट्रिंग सामग्री का कारण नहीं बनता है?
const char* string::c_str()
{
char c[_size+1];
strncpy(c,_data,_size);
c[_size]='\0';
return c;
}
लेकिन सामग्रियों को इसे जाने के कुछ ही समय बाद ओवरराइड किया गया है। यदि मैं गतिशील आवंटन करता हूं, तो मेरे पास या तो स्मृति रिसाव होगा या किसी भी समय किसी दिए गए स्ट्रिंग से केवल एक सी-स्ट्रिंग मौजूद हो सकती है। इससे कैसे बचा जा सकता है?
"* या किसी भी समय किसी दिए गए स्ट्रिंग से केवल एक सी-स्ट्रिंग मौजूद हो सकती है *" यह है कि कैसे 'std :: string' काम करता है - समस्या क्या है? – ildjarn
यदि 'strncpy()' उत्तर है, तो आप शायद [गलत प्रश्न पूछ रहे हैं] (http://the-flat-trantor-society.blogspot.com/2012/03/no-strncpy-is-not- सुरक्षित-strcpy.html)। –
मुझे एहसास नहीं हुआ कि इसे बदलने तक ही अस्तित्व में रहना था। यह अब ओ (1) समय में काम करता है। –