2010-10-01 12 views
13

एमएसवीसी 2005 पर, मेरे पास निम्न कोड है।ostringstream के स्ट्रिंग कन्स्ट्रक्टर का उद्देश्य क्या है?

std::ostringstream stream("initial string "); 
stream << 5; 
std::cout << stream.str(); 

क्या मैं उम्मीद है:

initial string 5 

क्या मैं मिलता है:

5nitial string 

एक तार के साथ धारा आरंभ किया जा रहा है, मैं अंत करने के लिए अपनी स्थिति को स्थानांतरित करने के लिए धारा उम्मीद करेंगे प्रारंभिक स्ट्रिंग का। जाहिर है, एसटीएल मुझसे सहमत नहीं है (पहली बार नहीं)।

ऐसे व्यवहार का उद्देश्य क्या है? क्या यह उपयोग किसी भी चीज़ के लिए उपयोगी है? साथ ही, प्रारंभिक स्ट्रिंग के अंत में स्ट्रीम स्थिति को अग्रिम करने का कोई तरीका है? क्यों सामने से लिखने स्थिति चूक, मैं नहीं जानता कि के रूप में

stream.seekp(0, ios_base::end); 

:

उत्तर

18

। आपके पास कुछ डेटा है, और जब तक आप अन्यथा निर्दिष्ट नहीं करते हैं, तो आपकी प्रारंभिक स्थिति डेटा की शुरुआत में होगी। आप डेटा में खोज सकते हैं, या आप मौजूदा डेटा के अंत में लिखने वाले पॉइंटर को आरंभ करने के लिए ios::ate निर्दिष्ट करते हैं, या आप मौजूदा डेटा के अंत में हमेशा लिखने वाले पॉइंटर को स्थिति देने के लिए ios::app निर्दिष्ट कर सकते हैं।

+0

यह समझ में आता है। 'ostringstream' अन्य धारा प्रकारों और शुरुआत के लिए डिफ़ॉल्ट रूप से अनुरूप है जब तक कि कहीं और स्पष्ट रूप से स्थानांतरित नहीं हो जाता है। धन्यवाद। –

+2

यह अब इतना स्पष्ट है कि आप इसे फाइलों के संबंध में समझाते हैं, लेकिन इससे पहले कि मैं हमेशा व्यवहार करता हूं, हालांकि व्यवहार बहुत अजीब था। दिन का मेरा नया ठंडा तथ्य। –

4

अंत करने के लिए तलाश करने के लिए, यह करते हैं।

14

आप अंत में धारा कर्सर सेट करने के लिए निर्माता की दूसरी (वैकल्पिक) पैरामीटर निर्दिष्ट कर सकते हैं: एक ostringstream का उपयोग करते हुए और एक प्रारंभिक मूल्य प्राप्त हो रहा सिर्फ लिखने के लिए किसी मौजूदा फ़ाइल को खोलने की तरह है

std::ostringstream stream("initial string ", std::ios::ate); 
संबंधित मुद्दे