如果你想從它構建istringstream,一個char *到空字符,或從的std :: string所有的東西:
istringstream str(ptr); // char*
istringstream str(other_str); // std::string
如果說起想要一個原始指針進入一個istream的緩衝區,你不能這樣做。如果流需要文件,終端或其他內容,可以選擇緩衝它們的內容,那麼Streams會按需提供數據(不完全正確,你可以使用strstream
,它接受一個原始指針並直接讀取/寫入數據。這是一個棄用的課程 - 不要使用它,我很幸運,我從來沒有這樣做過)。如果所有你想要的東西都可以像指針一樣使用,你可以使用streambuf迭代器。他們是不是真的指針的,所以你不能從begin
和其他東西減去end
:
std::istreambuf_iterator<char> begin(one_istream), end;
while(begin != end)
std::cout << *begin++;
如果你談論得到一個字符串,出了什麼事情被寫入一個字符串流,你可以使用ostringstream::str
:
ostringstream o;
o << "This is a number: " << 42;
std::string str = o.str(); // str == "This is a number: 42"
否則,你只能通過閱讀東西從istream
。你需要一個ostream
,那麼你可以做
stream.write(ptr, N);
stream.write(ptr.c_str(), ptr.c_str() + ptr.size());
寫入從字節是STR分,正好N個字符。您也可以使用<<
將它寫入流中。它會將所有內容寫入空字符或std :: string中的所有內容,但會尊重格式化標誌,如字段寬度:
stream << ptr; // char*
stream << other_str; // everything from std::string
對不起;這並不完全清楚你在這裏問什麼。你想能夠訪問一個字符串,就好像它是一個流?你想達到什麼目的? – Rob 2009-01-31 19:25:39
現在編輯了這個問題。 – kal 2009-01-31 19:31:52