मैं कभी भी std::string::data()
पर std::string::c_str()
पर कॉल क्यों करना चाहूंगा? निश्चित रूप से यहां मानक पागलपन के लिए कुछ विधि है ...std :: string :: c_str और std :: string :: डेटा के बीच क्या अंतर है?
उत्तर
c_str() एनयूएल समाप्ति की गारंटी देता है। डेटा() नहीं करता है।
मुझे लगा कि यह कुछ आसान होगा जिसे मैंने अनदेखा किया - धन्यवाद! – fbrereto
हकीकत में हालांकि, वे शायद एक ही बात को इंगित करते हैं (ऐसा नहीं कि आपको इस पर भरोसा करना चाहिए)। – Zifre
@Zifre: वे एक ही पते पर इंगित कर सकते हैं, लेकिन एक उत्परिवर्ती ऑपरेशन (str + = "...") के बाद, कार्यान्वयन शून्य डेटा समाप्ति के बिना आंतरिक डेटा बफर छोड़ सकता है, और केवल '\ 0' जोड़ सकता है c_str() विधि कहा जाता है। –
c_str() एक एनयूएल बाइट के साथ डेटा में एक सूचक लौटाता है ताकि आप वापसी मूल्य का उपयोग "सी स्ट्रिंग" के रूप में कर सकें।
डेटा() किसी भी संशोधन के बिना डेटा में एक सूचक देता है।
c_str() का उपयोग करें यदि आप जिस कोड का उपयोग कर रहे हैं, वह एक स्ट्रिंग मानता है एनयूएल समाप्त होता है (जैसे सी स्ट्रिंग को संभालने के लिए लिखा गया कोई भी फ़ंक्शन)।
एमएस एसटीएल 10.0 में अब कोई अंतर हो प्रतीत नहीं होता है, जैसा कि मैंने शीर्षक में इस देखें:
... \ माइक्रोसॉफ्ट विजुअल स्टूडियो 10.0 \ कुलपति \ शामिल \
const _Elem *c_str() const
{ // return pointer to null-terminated nonmutable array
return (_Myptr());
}
const _Elem *data() const
{ // return pointer to nonmutable array
return (c_str());
}
xstring
तो वे वही चीज़ लौटते हैं।
ऐसा लगता है कि यह वीसी 9.0 में भी वही है। –
यह व्यवहार है जो वर्तमान मानक द्वारा अनुमत है, और अगले के द्वारा आवश्यक है। मुझे संदेह है कि ज्यादातर पुस्तकालयों ने बदलाव की तैयारी में थोड़ी देर के लिए ऐसा कर रहे हैं। –
धन्यवाद डेनिस। –
- 1. std :: string <std::string>
- 2. std :: string
- 3. std :: string
- 4. std :: string को पूर्णांक
- 5. std :: string :: असाइन() segfault
- 6. ऑपरेटर std :: string() const?
- 7. मुझे std :: string
- 8. सीधे एक std :: istream से std :: string
- 9. std :: वेक्टर <std::string> क्रैश
- 10. std :: स्ट्रिंग :: c_str() और temporaries
- 11. आरसीपीपी :: CharacterVector को std :: string
- 12. क्या यह std :: string को लिखना कानूनी है?
- 13. std :: condition_variable और std :: condition_variable_any के बीच क्या अंतर है?
- 14. std :: merge और std :: set_union के बीच क्या अंतर है?
- 15. क्या gcc 4.3 के साथ std :: string thead-safe है?
- 16. std :: u16string, std :: u32string, std :: string, length(), आकार(), कोडपॉइंट्स और वर्ण
- 17. std :: string को std :: vector <char>
- 18. <string> और <string.h> के बीच अंतर?
- 19. std :: array <char, N> std :: string
- 20. const std :: map <boost :: tuples :: tuple, std :: string>?
- 21. std :: size_t बनाम size_t बनाम std :: string :: size_type
- 22. std :: fstream कक्षाएं std :: string क्यों नहीं लेती हैं?
- 23. std :: quick_exit और std :: abort के बीच क्या अंतर है और std :: quick_exit क्यों आवश्यक था?
- 24. बूस्ट पायथन कोई to_python कनवर्टर std :: string
- 25. std :: string को basic_ostream में परिवर्तित करें?
- 26. एक शून्य :: वेक्टर <std :: string>
- 27. सूची <string> और आईनेमेरेबल <String> के बीच क्या अंतर है?
- 28. std :: is_integer और std :: is_integral के बीच अंतर?
- 29. स्ट्रिंग द्वारा std :: vector <std :: pair <std :: string, bool >> को सॉर्ट करना?
- 30. "यूटीएफ -16" और "std :: wstring" के बीच क्या अंतर है?
बस यह इंगित करना चाहते हैं कि सी ++ [सी ++ 11 या सी ++ 0x या जो भी आप इसे कॉल करना चाहते हैं) के अगले संस्करण में, दोनों कार्य परिभाषा के समानार्थी हैं। –