<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[ostream in char umleiten]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Klasse, die mittels</p>
<pre><code class="language-cpp">std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, Klasse&amp; k)
{
    os &lt;&lt; k.info();
    return os;
};

class Klasse
{
  friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, Klasse&amp; k);
};
</code></pre>
<p>Statusinformationen in ein ostream-Objekt ausgeben kann, Nun würde ich gerne diese Ausgabe in einen char umleiten. Dazu suche irgendetwas in der Art von</p>
<pre><code>Klasse k;
char buf[256];
buf &lt;&lt; k;
</code></pre>
<p>Kann man das irgendwie realisieren? Kenne mich leider mit diesen ostreams nicht besonders aus und wäre Dankbar für jede Form der Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/134607/ostream-in-char-umleiten</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 15:43:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/134607.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 27 Jan 2006 11:33:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ostream in char umleiten on Fri, 27 Jan 2006 11:33:25 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Klasse, die mittels</p>
<pre><code class="language-cpp">std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, Klasse&amp; k)
{
    os &lt;&lt; k.info();
    return os;
};

class Klasse
{
  friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, Klasse&amp; k);
};
</code></pre>
<p>Statusinformationen in ein ostream-Objekt ausgeben kann, Nun würde ich gerne diese Ausgabe in einen char umleiten. Dazu suche irgendetwas in der Art von</p>
<pre><code>Klasse k;
char buf[256];
buf &lt;&lt; k;
</code></pre>
<p>Kann man das irgendwie realisieren? Kenne mich leider mit diesen ostreams nicht besonders aus und wäre Dankbar für jede Form der Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/977762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/977762</guid><dc:creator><![CDATA[Crashdown]]></dc:creator><pubDate>Fri, 27 Jan 2006 11:33:25 GMT</pubDate></item><item><title><![CDATA[Reply to ostream in char umleiten on Fri, 27 Jan 2006 11:35:53 GMT]]></title><description><![CDATA[<p>Schau dir doch mal die stringstream's an, die kannst du dafür verwenden (wobei mir persönlich std::string besser gefallen als char[].</p>
]]></description><link>https://www.c-plusplus.net/forum/post/977768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/977768</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 27 Jan 2006 11:35:53 GMT</pubDate></item><item><title><![CDATA[Reply to ostream in char umleiten on Fri, 27 Jan 2006 12:22:45 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>was möchtest du damit bezwecken?<br />
Kommt immer ganz drauf an, ob das überhaupt sinnvoll ist.<br />
Kannst ja vielleicht mal kurz den Zweck erläutern...</p>
<p>hier mal was zu Streams...</p>
<p><a href="http://cplus.kompf.de/artikel/stream1.html" rel="nofollow">http://cplus.kompf.de/artikel/stream1.html</a></p>
<p>wenn du das Problem näher beschreibst, kann ich dir bestimmt helfen</p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/977842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/977842</guid><dc:creator><![CDATA[Cyriz]]></dc:creator><pubDate>Fri, 27 Jan 2006 12:22:45 GMT</pubDate></item><item><title><![CDATA[Reply to ostream in char umleiten on Fri, 27 Jan 2006 12:59:28 GMT]]></title><description><![CDATA[<blockquote>
<p>was möchtest du damit bezwecken?</p>
</blockquote>
<p>Ich habe eine Funktion, die als Eingabe einen Parameter vom Typ const char* erwartet. Dieser Funktion würde ich nun gerne die Ausgabe der o.g. Klasse übergeben. Ich könnte mir die Zeichenkette, die der Ausgabeoperator liefert, auch mit sprintf selbst zusammenbasteln und der Funktion übergeben, aber eigentlich würde ich damit die selbe Arbeit zwei mal verrichten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/977899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/977899</guid><dc:creator><![CDATA[Crashdown]]></dc:creator><pubDate>Fri, 27 Jan 2006 12:59:28 GMT</pubDate></item><item><title><![CDATA[Reply to ostream in char umleiten on Fri, 27 Jan 2006 13:04:59 GMT]]></title><description><![CDATA[<p>Möglichkeit 1 wäre es ja, direkt <a href="http://k.info" rel="nofollow">k.info</a>() an deine Methode weiterzureichen (zur Not auch <a href="http://k.info" rel="nofollow">k.info</a>().c_str()).</p>
<p>Etwas komplizierter ist die folgende Lösung (wenn du einen aufwendigeren operator&lt;&lt; hast):</p>
<pre><code class="language-cpp">Klasse k;
std::stringstream sin;
sin&lt;&lt;k;
func(sin.str().c_str());// func() ist deine Funktion, an die du einen const char* weiterreichen willst
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/977905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/977905</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Fri, 27 Jan 2006 13:04:59 GMT</pubDate></item><item><title><![CDATA[Reply to ostream in char umleiten on Fri, 27 Jan 2006 13:08:33 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;strstream&gt;

// ...

char buf[256];
std::ostrstream os (buf, 256);
os &lt;&lt; k;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/977913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/977913</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Fri, 27 Jan 2006 13:08:33 GMT</pubDate></item><item><title><![CDATA[Reply to ostream in char umleiten on Fri, 27 Jan 2006 13:15:32 GMT]]></title><description><![CDATA[<p>Vielen Dank, CStoll, Möglichkeit 2 funktioniert like a charme!!! Danke aber auch an alle anderen, habt mir ne Menge Arbeit abgenommen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/977922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/977922</guid><dc:creator><![CDATA[Crashdown]]></dc:creator><pubDate>Fri, 27 Jan 2006 13:15:32 GMT</pubDate></item><item><title><![CDATA[Reply to ostream in char umleiten on Fri, 27 Jan 2006 13:42:00 GMT]]></title><description><![CDATA[<p>CStoll (off) schrieb:</p>
<blockquote>
<pre><code class="language-cpp">func(sin.str().c_str());// func() ist deine Funktion, an die du einen const char* weiterreichen willst
</code></pre>
</blockquote>
<p>Ist das legal? Ist der temporäre String, der durch den Aufruf von str() konstruiert wird, nicht schon wieder zerstört, wenn man den char*-Zeiger von c_str() an die Funktion weitergibt?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9606">@.filmor</a> : ostrstream ist deprecated <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/977957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/977957</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Fri, 27 Jan 2006 13:42:00 GMT</pubDate></item><item><title><![CDATA[Reply to ostream in char umleiten on Fri, 27 Jan 2006 13:45:56 GMT]]></title><description><![CDATA[<p>Soweit ich das gelernt habe, überleben temporäre Objekte bis zum Ende des Ausdruckes, in dem sie erstellt wurden - dieses also bis zum Rücksprung aus func(). (aber du kannst mich gerne berichtigen, wenn du magst)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/977960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/977960</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 27 Jan 2006 13:45:56 GMT</pubDate></item><item><title><![CDATA[Reply to ostream in char umleiten on Fri, 27 Jan 2006 13:50:31 GMT]]></title><description><![CDATA[<p>Sorry, ich dachte, dass sei die Stringstream-Version für char-Arrays (nicht dass ich sowas verwenden würde :)). Wo steht denn, dass c_str() einen temporären String zurückliefert?<br />
BTW, bei ifstream-Konstruktoren macht man üblicherweise auch nichts anderes (und das funktioniert mit Sicherheit)!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/977965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/977965</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Fri, 27 Jan 2006 13:50:31 GMT</pubDate></item><item><title><![CDATA[Reply to ostream in char umleiten on Fri, 27 Jan 2006 14:54:58 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<p>Wo steht denn, dass c_str() einen temporären String zurückliefert?</p>
</blockquote>
<p>Nicht c_str(). stringstream.str() liefert einen std::string zurück (keine Referenz sondern ein reales Objekt). Wenn man auf diesem temporären Objekt nun c_str() aufruft und danach der string sterben würde, so hätte man einen Zeiger auf bereits freigegebenen Speicher.</p>
<p>Ich bin mir aber auch nicht 100% sicher, ob der String tatsächlich zerstört wird oder ob das erst nach Beendigung des Funktionsaufrufes passiert. Mein Verdacht kommt daher, weil er am Aufruf von func() selbst nicht (direkt) beteiligt ist. Ob das tatsächlich so ist, kann ich auch nicht garantieren, sondern müsste erst den Standard befragen.</p>
<p>Die strstream-Klassen sind in der Tat für char* gedacht, werden im Standard allerdings nur im Annex D unter Compatibility Features [depr.str.strstreams] erwähnt.</p>
<p>Nachtrag:</p>
<p>Ich habe mal im Standard gewühlt dazu.</p>
<p>func(sin.str().c_str()); sollte demnach eine full-expression (1.9) sein (und sin.str().c_str() nur eine sub-expression). Wird in deren Kontext ein temporäres Objekt erzeugt (12.2), so wird es erst zerstört, nachdem die Auswertung der full-expression vollständig abgearbeitet ist. Demnach sollte die Zeile wohl gültig sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/978004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/978004</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Fri, 27 Jan 2006 14:54:58 GMT</pubDate></item></channel></rss>