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"

参阅

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