Namespaces
Variants

std::strstreambuf:: str

From cppreference.net
char * str ( ) ;
(C++98 中已弃用)
(C++26 中移除)

调用 freeze() ,随后返回获取区域起始指针的副本,即 std::streambuf::eback()

对于通过 std::strstream 接口构造的所有可写 std::strstreambuf 对象,获取区域的起始位置同时也是放置区域的起始位置。

目录

参数

(无)

返回值

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

注释

此函数通常通过 std::strstream 接口调用。

调用 freeze() 可确保返回的指针在下次显式调用 freeze ( false ) 前保持有效:否则(对于动态缓冲区)任何输出操作都可能触发缓冲区重新分配,从而导致指针失效。这还会在 std::strstreambuf 的析构函数中引发内存泄漏,除非在缓冲区(或更常见的、管理该缓冲区的 std:: strstream )被销毁前调用 freeze ( false )

示例

#include <iostream>
#include <strstream>
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); // 固定大小的只写缓冲区
    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]

参见

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