# std::strstreambuf::str

< cpp‎ | io‎ | strstreambuf

char* str() const; |  |

调用 freeze() ，然后返回获取区的起始指针， std::streambuf::eback() 。

对于所有通过 std::strstream 提供的接口构造的可写 `std::strstreambuf` 对象，获取区的起始亦为放置区的起始。

### 参数

（无）

### 返回值

eback() 的副本，可能为空指针。

### 注意

典型地通过 std::strstream 接口调用此函数。

对 freeze() 的调用保证返回指针直至下次对 freeze(false) 的显式调用前保持合法：否则（在动态缓冲上）任何输出操作可能触发缓冲区重分配，而这会非法化指针。它亦导致 `std::strstreambuf` 的析构函数中的内存泄漏，除非在销毁缓冲（或更常用地为管理它的 std::strstream ）前调用 freeze(false) 。

### 示例

    #include <strstream>
    #include <iostream>

    int main()
    {
        std::strstream dyn; // 动态分配的读/写缓冲区
        dyn << "Test: " << 1.23 << std::ends;
        std::strstreambuf* buf = dyn.rdbuf();
        std::cout << "R/W buffer holds \"" << buf->str() // 或 dyn.str()
                  << "\"\n";
        dyn.freeze(false); // 在动态 strstream 上调用 .str() 后

        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() // 或 user.str()
                  << "\"\n";

        std::istrstream lit("1 2 3"); // 固定大小只读缓冲区
        buf = lit.rdbuf();
        std::cout << "Read-only buffer holds \"" << buf->str() // 或 lit.str()
                  << "\"\n";
    }

输出：

    R/W buffer holds "Test: 1.23"
    Write-only buffer holds "1.23"
    Read-only buffer holds "1 2 31 2 3"

### 参阅

str | 访问输出缓冲区 (`std::strstream` 的公开成员函数)
str | 访问输出缓冲区 (`std::ostrstream` 的公开成员函数)
str | 访问输出缓冲区 (`std::istrstream` 的公开成员函数)