क्या C 11 की string::c_str() शून्य समाप्ति को समाप्त करती है?
C 11 में, string::c_str की अब कोई गारंटी नहीं है एक शून्य-समाप्त उत्पन्न करें स्ट्रिंग।
कारण:
सी 11 में, स्ट्रिंग::c_str को स्ट्रिंग::डेटा के समान परिभाषित किया गया है, जो बदले में *( के बराबर परिभाषित किया गया है) प्रारंभ() एन) 0
समाधान:
समाधान केवल विरासत कोड के साथ संगतता के लिए string::c_str() का उपयोग करना है। नए कोड के लिए, इसके बजाय string::data() का उपयोग करें। जबकि स्ट्रिंग::डेटा() एक शून्य-समाप्त स्ट्रिंग नहीं लौटाता है, यह अंतर्निहित बफर के लिए एक पॉइंटर लौटाता है, जिसे आंतरिक रूप से शून्य-समाप्त होने की गारंटी है।
कार्यान्वयन विवरण:
आंतरिक रूप से, स्ट्रिंग्स को अब नल-टर्मिनेटेड बफ़र्स का उपयोग करना आवश्यक है। धारा 21.4.5 में ऑपरेटर[] परिभाषा के लिए आवश्यक है कि आकार()
अतिरिक्त नोट्स:
&operator[](0) का उपयोग पर्यायवाची के रूप में किया जा सकता है c_str().समाप्ति शून्य वर्ण स्ट्रिंग डेटा के समान बफर में होना चाहिए, क्योंकि *(पी आकार()) charT() के बराबर होना चाहिए। इस प्रकार, भले ही शून्य वर्ण को आलस्य से प्रारंभ किया गया हो, मध्यवर्ती स्थिति में बफर का निरीक्षण करना संभव नहीं है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3