Namespaces
Variants

std::ostrstream:: str

From cppreference.net

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

返回指向缓冲区起始位置的指针,并在返回前冻结该缓冲区。此操作实际上等效于调用 rdbuf ( ) - > str ( )

目录

参数

(无)

返回值

指向关联的 std:: strstreambuf 中缓冲区起始位置的指针,若无可用缓冲区则为空指针。

注释

在调用将结果用作C字符串的 str() 之前,流缓冲区必须以空字符结尾。常规输出(例如 stream << 1.2 )不会存储空终止符,必须显式追加,通常使用操纵器 std::ends

在调用 str() 后,动态流会进入冻结状态。在此 ostrstream 对象所在作用域结束前,必须调用 freeze(false) ,否则析构函数将导致内存泄漏。此外,对已冻结流进行额外输出时,当达到分配缓冲区末尾后可能会被截断,这可能使缓冲区不以空字符结尾。

示例

#include <iostream>
#include <strstream>
int main()
{
    std::ostrstream dyn; // 动态分配的输出缓冲区
    dyn << "Test: " << 1.23; // 不添加 std::ends 以演示追加行为
    std::cout << "输出流包含 \"";
    std::cout.write(dyn.str(), dyn.pcount()) << "\"\n"; 
    // 由于调用 str(),流现在处于冻结状态
    dyn << " 更多文本" << std::ends;
    std::cout << "输出流包含 \"";
    std::cout.write(dyn.str(), dyn.pcount()) << "\"\n";
    dyn.freeze(false);
}

可能的输出:

输出流包含 "Test: 1.23"
输出流包含 "Test: 1.23 More "

参见

标记缓冲区为冻结状态并返回输入序列的起始指针
( std::strstreambuf 的公开成员函数)