#include <strstream.h> class ios { public: enum open_mode { in, out, ate, app, trunc, nocreate, noreplace }; // see ios(3CC4) for remainder ... }; #include <strstream.h> // includes <iostream.h> class strstreambuf : public streambuf { // see strstreambuf(3C++) ... }; class strstreambase : virtual public ios { // implementation detail of the Xstream classes ... }; class istrstream : public strstreambase, public istream { public: istrstream(char* ptr); istrstream(char* ptr, int len); strstreambuf* rdbuf(); }; class ostrstream : public strstreambase, public ostream { public: ostrstream(char* ptr, int len, int mode=ios::out); ostrstream(); strstreambuf* rdbuf(); int pcount(); char* str(); }; class strstream : public strstreambase, public iostream { public: strstream(); strstream(char* ptr, int len, int mode); strstreambuf* rdbuf(); char* str(); };
类 istrstream、ostrstream 和 strstream 分别是类 istream、ostream 和 iostream 的特例,适用于使用内存中字符数组的 I/O。也就是说,关联的 streambuf 是一个 strstreambuf。
辅助类 strstreambase 是一个实现细节,主要是提供了一组通用函数。不再进一步对其进行讨论。
假定 ptr 指向以空字符结尾的字符数组,该数组将用作输入源。空字符不是输入的一部分。允许在数组范围内使用 seekg() 进行查找。
假定 ptr 指向长度为 len 的字符数组,该数组将用作输入源。允许在数组范围内使用 seekg() 进行查找。
返回指向与 iss 关联的 strstreambuf 的指针。这与此函数的基类版本相同,但是返回类型比较特别,是一个 strstreambuf*。
创建一个空的输出流,它将使用动态的(可扩展的)字符数组(请参见 ssbuf(3CC4))。允许在数组的当前边界内进行查找。此流之后可能将通过 str() 转换为 char*(请参见下文)。
使用以 ptr 开头的 len 字符的静态(不可扩展的)数组创建一个输出流。如果在 mode 中设置了 ios::ate 或 ios::app 位(请参见 ios(3CC4)),则会假定数组包含一个开头位于 ptr 的以空字符结尾的字符串。字符将从空字符处从开始存储,但是决不会超过 len 个字符。如果 mode 中未设置那些位,则会假定数组不包含任何数据,并且字符将从 ptr 处开始存储。允许在数组范围内进行查找。
返回指向与 oss 关联的 strstreambuf 的指针。这与此函数的基类版本相同,但是返回类型比较特别,是一个 strstreambuf*。
返回数组中存储的字符数。当数组包含二进制数据或者未以空字符结尾时,这尤其有用。
将指针返回到基础数组的起始位置,并冻结流。如果数组是动态分配的,则现在不会自动将其删除或者使其以空字符结尾,并且它将不再可扩展(请参见 strstreambuf 中的 freeze())。在调用 str() 之前,当销毁 streambuf 时将自动释放动态分配的数组。之后,将由用户负责数组并决定何时释放它。
创建一个空的双向输出流,它将使用动态的(可扩展的)字符数组(请参见 ssbuf(3CC4))。允许在数组的当前边界内进行查找。
使用以 ptr 开头的 len 字符的静态(不可扩展的)数组创建一个双向流。如果在 mode 中设置了 ios::ate 或 ios::app 位(请参见 ios(3CC4)),则会假定数组包含一个开头位于 ptr 的以空字符结尾的字符串。字符将从空字符处从开始存储,但是决不会超过 len 个字符。如果 mode 中未设置那些位,则会假定数组不包含任何数据,并且字符将从 ptr 处开始存储。允许在数组范围内进行查找。
返回指向与 ss 关联的 strstreambuf 的指针。这与此函数的基类版本相同,但是返回类型比较特别,是一个 strstreambuf*。
将指针返回到基础数组的起始位置,并冻结流。如果数组是动态分配的,则现在不会自动将其删除或者使其以空字符结尾,并且它将不再可扩展(请参见 strstreambuf 中的 freeze())。在调用 str() 之前,当销毁 streambuf 时将自动释放动态分配的数组。之后,将由用户负责数组并决定何时释放它。
ios (3CC4) 、 ios.intro (3CC4) 、 istream (3CC4) 、 ostream (3CC4) 、 sbufpub (3CC4) 、 ssbuf (3CC4)
《C++ Library Reference》中的第 3 章 "The Classic iostream Library"