std::ostrstream::str
来自 cppreference.com
< cpp | io | ostrstream
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; // dynamically-allocated output buffer dyn << "Test: " << 1.23; // not adding std::ends to demonstrate append behavior std::cout << "The output stream holds \""; std::cout.write(dyn.str(), dyn.pcount()) << "\"\n"; // the stream is now frozen due to str() dyn << " More text" << std::ends; std::cout << "The output stream holds \""; std::cout.write(dyn.str(), dyn.pcount()) << "\"\n"; dyn.freeze(false); }
可能的输出
The stream holds "Test: 1.23" The stream holds "Test: 1.23 More "
参见
标记缓冲区已冻结并返回输入序列的起始指针 ( std::strstreambuf 的公共成员函数) |