तो, मैं सी ++ काम में स्ट्रिंग अक्षर कैसे बेहतर समझना चाहता हूं। मैं ज्यादातर परिस्थितियों से चिंतित हूं जहां आप एक सूचक के लिए एक स्ट्रिंग अक्षर का पता आवंटित कर रहे हैं, और इसे चारों ओर पास कर रहे हैं। उदाहरण के लिए:सी ++ स्ट्रिंग लिटरेल्स कितने सुरक्षित और भरोसेमंद हैं?
char* advice = "Don't stick your hands in the toaster.";
अब कहें कि मैं प्रोग्राम की अवधि के लिए पॉइंटर्स की प्रतिलिपि बनाकर बस इस स्ट्रिंग को पास करता हूं। निश्चित रूप से, यह शायद एक अच्छा विचार नहीं है, लेकिन मैं उत्सुक हूं कि वास्तव में दृश्यों के पीछे क्या चल रहा है।
एक और उदाहरण के लिए, मान लीजिए कि हम एक समारोह है कि एक स्ट्रिंग शाब्दिक रिटर्न करते हैं:
char* foo()
{
// function does does stuff
return "Yikes!"; // somebody's feeble attempt at an error message
}
अब कहते हैं कि इस समारोह बहुत बार कहा जाता है की सुविधा देता है, और स्ट्रिंग शाब्दिक केवल समय के बारे में आधे यह कहा जाता है प्रयोग किया जाता है :
// situation #1: it's just randomly called without heed to the return value
foo();
// situation #2: the returned string is kept and used for who knows how long
char* retVal = foo();
पहली स्थिति में, वास्तव में क्या हो रहा है? क्या स्ट्रिंग अभी बनाई गई है लेकिन इसका उपयोग नहीं किया गया है, और कभी भी बर्बाद नहीं किया गया है?
दूसरी स्थिति में, जब तक उपयोगकर्ता को इसकी आवश्यकता होती है तब तक स्ट्रिंग को बनाए रखा जा रहा है? क्या होता है जब इसकी आवश्यकता नहीं होती है ... क्या उस स्मृति को मुक्त कर दिया जाएगा (अब उस जगह को कुछ भी नहीं मानते हैं)?
मुझे गलत मत समझो, मैं इस तरह स्ट्रिंग अक्षर का उपयोग करने की योजना नहीं बना रहा हूं। मैं अपने तारों को चेक में रखने के लिए एक कंटेनर का उपयोग करने की योजना बना रहा हूं (शायद std :: string)। मैं ज्यादातर यह जानना चाहता हूं कि क्या ये स्थितियां स्मृति प्रबंधन या दूषित डेटा के लिए समस्याएं पैदा कर सकती हैं।
सी ++ स्ट्रिंग अक्षर पूरी तरह से सुरक्षित और भरोसेमंद हैं। यह प्रोग्रामर हैं जो स्ट्रिंग अक्षर का उपयोग करते हैं जो सुरक्षित और भरोसेमंद नहीं हैं। –
यही वह है जो मैं सोच रहा था; मुझे बस मुझे लगता है कि आश्वासन की आवश्यकता है। धन्यवाद। :) –