यहां तक कि पता है कि आपने देखा है कि वे भी ऐसा ही करते हैं, या वह .data () कॉल .c_str (), यह मान लेना सही नहीं है कि यह अन्य कंपाइलर्स के लिए भी ऐसा ही होगा। यह भी संभव है कि आपका संकलक भविष्य में रिलीज के साथ बदल जाएगा।
Std :: string का उपयोग करने के 2 कारण:
std :: string का उपयोग टेक्स्ट और मनमाना बाइनरी डेटा दोनों के लिए किया जा सकता है।
//Example 1
//Plain text:
std::string s1;
s1 = "abc";
//Example 2
//Arbitrary binary data:
std::string s2;
s2.append("a\0b\0b\0", 6);
जब आप अपने स्ट्रिंग का उपयोग कर रहे हों, तो .c_str () विधि का उपयोग करें उदाहरण 1।
जब आप अपने स्ट्रिंग का उपयोग उदाहरण के रूप में कर रहे हैं तो आपको .data () विधि का उपयोग करना चाहिए। 2. नहीं क्योंकि इन मामलों में .c_str () का उपयोग करना खतरनाक है, लेकिन क्योंकि यह अधिक स्पष्ट है कि आप बाइनरी डेटा के साथ दूसरों की समीक्षा के लिए काम कर रहे हैं। तुम्हारा कोड।
.Data () का उपयोग करके संभावित नुकसान
निम्न कोड गलत है और आपके प्रोग्राम में सेगफॉल्ट का कारण बन सकता है:
std::string s;
s = "abc";
char sz[512];
strcpy(sz, s.data());//This could crash depending on the implementation of .data()
कार्यान्वयनकर्ताओं के लिए .data () और .c_str () एक ही काम करना क्यों आम है?
क्योंकि ऐसा करना अधिक कुशल है। बनाने के लिए एकमात्र तरीका .data () कुछ है जो शून्य समाप्त नहीं हुआ है, लौटाते हैं। उनके आंतरिक बफर की प्रतिलिपि .c__ () या (.data) या केवल 2 बफ़र्स का उपयोग करना होगा। एक एकल अशक्त बफ़र होने का हमेशा मतलब है कि आप हमेशा एक आंतरिक बफर का उपयोग कर सकते हैं जब std :: string को कार्यान्वित किया जाता है।
.data()
, इसलिए वे गैर-स्थिर स्ट्रिंग्स के लिए समान नहीं हैं।