std::strstream::strstream
strstream(); |
(1) | |
strstream(char* s, int n, std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out); |
(2) | |
构造新的输入/输出 strstream 及其底层 std::strstreambuf 。
1) 默认构造底层 std::strstreambuf ,这创建动态成长的缓冲区,并以该 strstreambuf 成员的地址初始化基类。
2) 以底层 std::strstreambuf 成员的地址初始化基类,该成员以二种可能方式之一初始化,两者都使用用户提供的数组:
a) 若
mode
中未设置 app
位,则通过调用 strstreambuf(s, n, s) 构造缓冲。若首元素为 s
所指向的数组中元素少于 n
个,则行为未定义。b) 若
mode
中设置了 app
位,则通过调用 strstreambuf(s, n, s + std::strlen(s)) 构造缓冲。若首元素为 s
所指向的数组中元素少于 n
个,或若数组不含合法的空终止字符序列,则行为未定义。参数
s | - | 用作输出缓冲区的 char 数组 | ||||||||||||||||
n | - | 用作输出缓冲区的数组大小 | ||||||||||||||||
mode | - | 指定流打开模式。它是位掩码类型,定义下列常量(尽管只使用 app ):
|
示例
运行此代码
#include <iostream> #include <strstream> #include <string> int main() { // dynamic buffer std::strstream s1; // 动态缓冲区 s1 << 1 << ' ' << 3.14 << " example" << std::ends; std::cout << "buffer holds '" << s1.str() << "'\n"; s1.freeze(false); int n; double d; std::string w; s1 >> n >> d >> w; std::cout << "Read back: n = " << n << " d = " << d << " w = '" << w << "'\n"; // 静态缓冲区 char arr[20] = "-1 -3.14 "; std::strstream s2(arr, sizeof arr, std::ios_base::app); s2 << "another" << std::ends; std::cout << "buffer holds: '" << s2.str() << "'\n"; s2 >> n >> d >> w; std::cout << "Read back: n = " << n << " d = " << d << " w = '" << w << "'\n"; }
输出:
buffer holds '1 3.14 example' Read back: n = 1 d = 3.14 w = 'example' buffer holds: '-1 -3.14 another' Read back: n = -1 d = -3.14 w = 'another'
参阅
构造 strstreambuf 对象 ( std::strstreambuf 的公开成员函数) | |
构造 strstream ,可选地分配缓冲区 ( std::istrstream 的公开成员函数) | |
构造 strstream ,可选地分配缓冲区 ( std::ostrstream 的公开成员函数) |