क्या नीचे वाले स्ट्रिंग में शून्य टर्मिनेटर '\ 0' होगा?
std::string temp = "hello whats up";
धन्यवाद! :)
क्या नीचे वाले स्ट्रिंग में शून्य टर्मिनेटर '\ 0' होगा?
std::string temp = "hello whats up";
धन्यवाद! :)
जवाबों:
नहीं, लेकिन यदि आप कहते हैं कि temp.c_str()
एक शून्य टर्मिनेटर को इस पद्धति से वापसी में शामिल किया जाएगा।
यह भी कहने योग्य है कि आप किसी भी अन्य वर्ण की तरह एक स्ट्रिंग में एक अशक्त चरित्र को शामिल कर सकते हैं।
string s("hello");
cout << s.size() << ' ';
s[1] = '\0';
cout << s.size() << '\n';
प्रिंट
5 5
और 5 1
जैसा कि आप उम्मीद कर सकते हैं कि अगर अशक्त पात्रों के तार के लिए एक विशेष अर्थ था।
temp.c_str()
हैं अशक्त चरित्र को शामिल किया जाएगा। यदि आपको वास्तव में स्ट्रिंग में इसकी आवश्यकता है, तो इसे किसी अन्य वर्ण की तरह ही जोड़ें। temp.push_back('\0')
। अब दो अशक्त वर्ण temp.c_str()
शामिल होंगे ।
C ++ 03 में नहीं है, और C ++ 11 से पहले इसकी गारंटी भी नहीं है कि C ++ std :: string मेमोरी में निरंतर है। केवल C स्ट्रिंग्स (char arrays जो स्ट्रिंग्स को स्टोर करने के लिए अभिप्रेत हैं) में शून्य टर्मिनेटर था।
C ++ 11 में और बाद में, mystring.c_str()
के बराबर mystring.data()
है &mystring[0]
और होने mystring[mystring.size()]
की गारंटी है '\0'
।
यह यहां 'सम्मिलित' की आपकी परिभाषा पर निर्भर करता है। में
std::string temp = "hello whats up";
ध्यान देने योग्य बातें हैं:
temp.size()
पहले h
से अंतिम p
(दोनों सम्मिलित) से वर्णों की संख्या लौटाएगाtemp.c_str()
या temp.data()
एक null
टर्मिनेटर के साथ वापस आ जाएगाint(temp[temp.size()])
होगामैं जानता हूँ कि, मैं जवाब यहां से कुछ के समान ध्वनि, लेकिन मैं कहना है कि करना चाहते हैं size
की std::string
में C++
है अलग से बनाए रखा और इसे पसंद नहीं है में C
जहां गिनती जब तक आप पहले लगता है रखने null
टर्मिनेटर।
जोड़ने के लिए, कहानी थोड़ी अलग होगी यदि आपके string literal
एम्बेड शामिल हैं \0
। इस मामले में, std::string
पहले null
चरित्र पर स्टॉप का निर्माण , निम्नानुसार है:
std::string s1 = "ab\0\0cd"; // s1 contains "ab", using string literal
std::string s2{"ab\0\0cd", 6}; // s2 contains "ab\0\0cd", using different ctr
std::string s3 = "ab\0\0cd"s; // s3 contains "ab\0\0cd", using ""s operator
संदर्भ:
हां, यदि आप कॉल करते हैं temp.c_str()
, तो यह अशक्त-समाप्त सी-स्ट्रिंग लौटाएगा।
हालाँकि, ऑब्जेक्ट में संग्रहीत वास्तविक डेटा को temp
शून्य-समाप्त नहीं किया जा सकता है, लेकिन यह प्रोग्रामर के लिए कोई मायने नहीं रखता है और इससे कोई फर्क नहीं पड़ता है, क्योंकि जब प्रोग्रामर चाहता है const char*
, तो वह c_str()
ऑब्जेक्ट पर कॉल करेगा , जो अशक्त लौटने की गारंटी है -संबंधित स्ट्रिंग।
temp.size()
।
C ++ स्ट्रिंग्स के साथ आपको इसके बारे में चिंता करने की ज़रूरत नहीं है, और यह संभवतः कार्यान्वयन पर निर्भर है।
उपयोग करने से temp.c_str()
आपको स्ट्रिंग का सी प्रतिनिधित्व मिलता है, जिसमें निश्चित रूप से \0
चार शामिल होंगे । इसके अलावा, मैं वास्तव में यह नहीं देखता कि यह C ++ स्ट्रिंग पर कैसे उपयोगी होगा
std::string
आंतरिक रूप से वर्णों की संख्या की गिनती रखता है। आंतरिक रूप से यह इस गिनती का उपयोग करके काम करता है। जैसे दूसरों ने कहा है, जब आपको प्रदर्शन के लिए स्ट्रिंग की आवश्यकता होती है या जो भी कारण हो, तो आप इसकी c_str()
विधि कर सकते हैं जो आपको अंत में अशक्त टर्मिनेटर के साथ स्ट्रिंग देगा।