14fee23f9Smrg<?xml version="1.0" encoding="UTF-8" standalone="no"?> 2*d79abf08Smrg<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Memory Based Streams</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13. Input and Output" /><link rel="prev" href="streambufs.html" title="Stream Buffers" /><link rel="next" href="fstreams.html" title="File Based Streams" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory Based Streams</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="streambufs.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 34fee23f9Smrg Input and Output 44fee23f9Smrg 548fb7bfaSmrg</th><td width="20%" align="right"> <a accesskey="n" href="fstreams.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.memstreams"></a>Memory Based Streams</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.memstreams.compat"></a>Compatibility With strstream</h3></div></div></div><p> 64fee23f9Smrg </p><p>Stringstreams (defined in the header <code class="code"><sstream></code>) 74fee23f9Smrg are in this author's opinion one of the coolest things since 84fee23f9Smrg sliced time. An example of their use is in the Received Wisdom 948fb7bfaSmrg section for Sect1 21 (Strings), 1048fb7bfaSmrg <a class="link" href="strings.html#strings.string.Cstring" title="CString (MFC)"> describing how to 114fee23f9Smrg format strings</a>. 124fee23f9Smrg </p><p>The quick definition is: they are siblings of ifstream and ofstream, 134fee23f9Smrg and they do for <code class="code">std::string</code> what their siblings do for 144fee23f9Smrg files. All that work you put into writing <code class="code"><<</code> and 154fee23f9Smrg <code class="code">>></code> functions for your classes now pays off 164fee23f9Smrg <span class="emphasis"><em>again!</em></span> Need to format a string before passing the string 174fee23f9Smrg to a function? Send your stuff via <code class="code"><<</code> to an 184fee23f9Smrg ostringstream. You've read a string as input and need to parse it? 194fee23f9Smrg Initialize an istringstream with that string, and then pull pieces 204fee23f9Smrg out of it with <code class="code">>></code>. Have a stringstream and need to 214fee23f9Smrg get a copy of the string inside? Just call the <code class="code">str()</code> 224fee23f9Smrg member function. 234fee23f9Smrg </p><p>This only works if you've written your 244fee23f9Smrg <code class="code"><<</code>/<code class="code">>></code> functions correctly, though, 254fee23f9Smrg and correctly means that they take istreams and ostreams as 264fee23f9Smrg parameters, not i<span class="emphasis"><em>f</em></span>streams and o<span class="emphasis"><em>f</em></span>streams. If they 274fee23f9Smrg take the latter, then your I/O operators will work fine with 284fee23f9Smrg file streams, but with nothing else -- including stringstreams. 294fee23f9Smrg </p><p>If you are a user of the strstream classes, you need to update 304fee23f9Smrg your code. You don't have to explicitly append <code class="code">ends</code> to 314fee23f9Smrg terminate the C-style character array, you don't have to mess with 324fee23f9Smrg "freezing" functions, and you don't have to manage the 334fee23f9Smrg memory yourself. The strstreams have been officially deprecated, 344fee23f9Smrg which means that 1) future revisions of the C++ Standard won't 354fee23f9Smrg support them, and 2) if you use them, people will laugh at you. 3648fb7bfaSmrg </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="streambufs.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="fstreams.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Stream Buffers </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> File Based Streams</td></tr></table></div></body></html>