<?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[Double zu string mit std::ostringstream]]></title><description><![CDATA[<p>Hallo,</p>
<p>gibt es im folgenden Code einen Fehler?</p>
<pre><code class="language-cpp">std::string dbl_to_str(double d)
{
  std::ostringstream temp;
  temp &lt;&lt; d;
  return temp.str();
}
</code></pre>
<p>Mir scheint als hätte ich da ein undefiniertes Verhalten. In manchen Programmen funktioniert das tadellos, in manchen wiederum bekomme ich einen Segmentation fault. Ich programmiere unter Linux mit Gcc 3.4.</p>
<p>Wenn ich mit dem Gdb debugge beobachte ich, in den Programmen in denen es nicht funktioniert, dass der Parameter d nach dem Konstruktoraufruf von temp einen willkürlichen Wert annimmt. Wenn die Funktion dann zurückkehrt kommt es zum Segmentation fault. Ist da was am Quelltext falsch? Ich kann mir nicht erkären, warum der Konstruktoraufruf von temp d beeinflusst. Könnte das auch am Gcc liegen?</p>
<p>Danke.<br />
Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/129944/double-zu-string-mit-std-ostringstream</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 11:01:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/129944.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 18 Dec 2005 11:36:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Double zu string mit std::ostringstream on Sun, 18 Dec 2005 11:36:20 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>gibt es im folgenden Code einen Fehler?</p>
<pre><code class="language-cpp">std::string dbl_to_str(double d)
{
  std::ostringstream temp;
  temp &lt;&lt; d;
  return temp.str();
}
</code></pre>
<p>Mir scheint als hätte ich da ein undefiniertes Verhalten. In manchen Programmen funktioniert das tadellos, in manchen wiederum bekomme ich einen Segmentation fault. Ich programmiere unter Linux mit Gcc 3.4.</p>
<p>Wenn ich mit dem Gdb debugge beobachte ich, in den Programmen in denen es nicht funktioniert, dass der Parameter d nach dem Konstruktoraufruf von temp einen willkürlichen Wert annimmt. Wenn die Funktion dann zurückkehrt kommt es zum Segmentation fault. Ist da was am Quelltext falsch? Ich kann mir nicht erkären, warum der Konstruktoraufruf von temp d beeinflusst. Könnte das auch am Gcc liegen?</p>
<p>Danke.<br />
Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/944734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944734</guid><dc:creator><![CDATA[tichy]]></dc:creator><pubDate>Sun, 18 Dec 2005 11:36:20 GMT</pubDate></item><item><title><![CDATA[Reply to Double zu string mit std::ostringstream on Sun, 18 Dec 2005 11:50:18 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Das liegt daran, das .c_str() nur einen Zeiger auf einen internen SPeicherbereich von temp zurückgibt, der nach der Funktion nicht mehr gültig ist.<br />
Du must deine Funktion in etwa so umschreiben :</p>
<pre><code class="language-cpp">std::string dbl_to_str(double d)
{
  std::ostringstream temp;
  temp &lt;&lt; d;
  std::string out;
  temp &gt;&gt; out;
  return out;
}
</code></pre>
<p>oder schau gleich nach dem Template <em>lexical_cast</em>, wo du das für alle Typen hast.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/944743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/944743</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Sun, 18 Dec 2005 11:50:18 GMT</pubDate></item><item><title><![CDATA[Reply to Double zu string mit std::ostringstream on Sun, 18 Dec 2005 18:36:18 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>danke! Aber was meinst du mit c_str()? Da ist ja kein solcher Aufruf. Ich weiss, dass die Methode std::string::c_str() nur einen Zeiger auf das interne Zeichen-Array liefert aber die <strong>str()</strong> Methode eines stringstreams sollte doch einen vollständiges std::string Objekt zurückliefern, oder nicht? Ausserdem sollte doch damit</p>
<pre><code class="language-cpp">return temp.str();
</code></pre>
<p>ein neues string-objekt mit dem inhalt vom temp.str() konstruiert und zurückgegeben werden.</p>
<p>Folgenden Fehler meldet mir der Gcc, wenn ich deinen Code einsetze:</p>
<p>gcc schrieb:</p>
<blockquote>
<p>error: no match for 'operator&gt;&gt;' in 'temp &gt;&gt; out'</p>
</blockquote>
<p>Um nochmal auf mein erstes Posting aufmerksam zu machen:</p>
<p>tichy schrieb:</p>
<blockquote>
<p>Wenn ich mit dem Gdb debugge beobachte ich, in den Programmen in denen es nicht funktioniert, dass der Parameter d nach dem Konstruktoraufruf von temp einen willkürlichen Wert annimmt. Wenn die Funktion dann zurückkehrt kommt es zum Segmentation fault.</p>
</blockquote>
<p>Das kommt mir sehr merkwürdig vor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/945043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/945043</guid><dc:creator><![CDATA[tichy]]></dc:creator><pubDate>Sun, 18 Dec 2005 18:36:18 GMT</pubDate></item><item><title><![CDATA[Reply to Double zu string mit std::ostringstream on Mon, 19 Dec 2005 19:43:58 GMT]]></title><description><![CDATA[<p>*push*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/945875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/945875</guid><dc:creator><![CDATA[tichy]]></dc:creator><pubDate>Mon, 19 Dec 2005 19:43:58 GMT</pubDate></item></channel></rss>