std::strstreambuf::str
来自cppreference.com
< 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 的公开成员函数) |