std::strstreambuf::str
char* str(); | (deprecated in C++98) (removed in C++26) | |
Calls freeze(), then returns a copy of start pointer of the get area, std::streambuf::eback().
The start of the get area, for all writeable std::strstreambuf
objects constructed through the interface provided by std::strstream, is also the start of the put area.
Contents |
[edit]Parameters
(none)
[edit]Return value
A copy of eback(), which may be a null pointer.
[edit]Notes
This function is typically called through the std::strstream interface.
The call to freeze() guarantees that the returned pointer remains valid until the next explicit call to freeze(false): otherwise (on a dynamic buffer) any output operation could trigger buffer reallocation which would invalidate the pointer. It also causes a memory leak in the destructor of std::strstreambuf
, unless freeze(false) is called before the buffer (or, more commonly, the std::strstream that manages it) is destroyed.
[edit]Example
#include <iostream>#include <strstream> int main(){std::strstream dyn;// dynamically-allocated read/write buffer dyn <<"Test: "<<1.23<<std::ends;std::strstreambuf* buf = dyn.rdbuf();std::cout<<"R/W buffer holds ["<< buf->str()// or dyn.str()<<"]\n"; dyn.freeze(false);// after calling .str() on a dynamic strstream char arr[10];std::ostrstream user(arr, 10);// fixed-size write-only buffer buf = user.rdbuf(); user <<1.23<<std::ends;std::cout<<"Write-only buffer holds ["<< buf->str()// or user.str()<<"]\n"; std::istrstream lit("1 2 3");// fixed-size read-only buffer buf = lit.rdbuf();std::cout<<"Read-only buffer holds ["<< buf->str()// or lit.str()<<"]\n";}
Output:
R/W buffer holds [Test: 1.23] Write-only buffer holds [1.23] Read-only buffer holds [1 2 31 2 3]
[edit]See also
accesses the output buffer (public member function of std::strstream ) | |
accesses the output buffer (public member function of std::ostrstream ) | |
accesses the output buffer (public member function of std::istrstream ) |