"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > क्या C++11\'s `string::c_str()` अभी भी शून्य-समाप्त है?

क्या C++11\'s `string::c_str()` अभी भी शून्य-समाप्त है?

2024-11-08 को प्रकाशित
ब्राउज़ करें:101

Is C  11\'s `string::c_str()` Still Null-Terminated?

क्या 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