कच्चे स्ट्रिंग का उपयोग
हां, कभी-कभी आप वास्तव में ऐसा कर सकते हैं। कास्ट चार * का उपयोग करते समय, स्टैक और स्ट्रिंग शाब्दिक पर आवंटित चार सरणियाँ आप इसे इस तरह से कर सकते हैं कि कोई स्मृति आवंटन नहीं है।
इस तरह के कोड को लिखने के लिए अक्सर स्ट्रिंग या वेक्टर का उपयोग करने की तुलना में अधिक सोच और देखभाल की आवश्यकता होती है, लेकिन एक उचित तकनीकों के साथ यह किया जा सकता है। उचित तकनीकों के साथ कोड सुरक्षित हो सकता है, लेकिन आपको हमेशा यह सुनिश्चित करने की आवश्यकता होती है कि चार में नकल करते समय [] या तो आपके पास नकल की जा रही स्ट्रिंग की कुछ गारंटी है, या आप जांचते हैं और सुशोभित तार को सावधानी से संभालते हैं। ऐसा नहीं करने से क्या कार्य करने वाले परिवार को असुरक्षित होने की प्रतिष्ठा मिली।
कैसे टेम्पलेट सुरक्षित चार बफ़र्स लिखने में मदद कर सकते हैं
चेर [] बफ़र सुरक्षा के लिए, टेम्पलेट मदद कर सकते हैं, क्योंकि वे आपके लिए बफर आकार को संभालने के लिए एक एनकैप्सुलेशन बना सकते हैं। इस तरह के टेम्प्लेट Microsoft द्वारा लागू किए जाते हैं जैसे कि strcpy के लिए सुरक्षित प्रतिस्थापन प्रदान करने के लिए। यहाँ उदाहरण मेरे अपने कोड से निकाला गया है, असली कोड में बहुत अधिक विधियाँ हैं, लेकिन मूल विचार को व्यक्त करने के लिए यह पर्याप्त होना चाहिए:
template <int Size>
class BString
{
char _data[Size];
public:
BString()
{
_data[0]=0;
_data[Size-1]=0;
}
const BString &operator = (const char *src)
{
strncpy(_data,src,Size-1);
return *this;
}
operator const char *() const {return _data;}
};
template <int Size>
inline const BString<Size> & strcpy(BString<Size> &dst, const char *src)
{
return dst = src;
}