命名空间
变体
操作

std::strstreambuf::str

来自 cppreference.com
< cpp‎ | io‎ | strstreambuf
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; // 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";
}

输出

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 的公共成员函数) [编辑]