std::strstreambuf::str - cppreference.com

##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# std::strstreambuf::str

From cppreference.com
< cpp‎ | io‎ | strstreambuf

char* str() const; |  |

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.

### [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

Run this code

    #include <strstream>
    #include <iostream>

    int main()
    {
        std::strstream dyn; // dynamically-allocated read/write buffer
        dyn << "Test: " << 1.23;
        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

str | accesses the output buffer (public member function of `std::strstream`) [edit]
str | accesses the output buffer (public member function of `std::ostrstream`) [edit]
str | accesses the output buffer (public member function of `std::istrstream`) [edit]

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/io/strstreambuf/str&oldid=64754"