<?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[Lebenszeit von string::c_str()]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>wie lange lebt eigentlich der von <code>std::string::c_str()</code> zurückgegeben Zeiger und wie lange darf er benutzt werden? <code>return</code> erzeugt ja eine (möglicherweise wegoptimierte) Kopie des Rückgabewerts, aber das ist in diesem Fall ja nur der Zeiger und nicht der Speicherbereich, auf den der Zeiger zeigt. Oder gibt es für <code>const char*</code> einen Sonderfall?</p>
<pre><code>const char* func()
{
   std::string s = &quot;Hello World&quot;;
   return s.c_str();
}

int main()
{
   const char* res = func();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/334479/lebenszeit-von-string-c_str</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Apr 2026 14:55:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/334479.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 16 Sep 2015 14:50:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Lebenszeit von string::c_str() on Wed, 16 Sep 2015 14:50:03 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>wie lange lebt eigentlich der von <code>std::string::c_str()</code> zurückgegeben Zeiger und wie lange darf er benutzt werden? <code>return</code> erzeugt ja eine (möglicherweise wegoptimierte) Kopie des Rückgabewerts, aber das ist in diesem Fall ja nur der Zeiger und nicht der Speicherbereich, auf den der Zeiger zeigt. Oder gibt es für <code>const char*</code> einen Sonderfall?</p>
<pre><code>const char* func()
{
   std::string s = &quot;Hello World&quot;;
   return s.c_str();
}

int main()
{
   const char* res = func();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2468181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2468181</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Wed, 16 Sep 2015 14:50:03 GMT</pubDate></item><item><title><![CDATA[Reply to Lebenszeit von string::c_str() on Wed, 16 Sep 2015 14:55:16 GMT]]></title><description><![CDATA[<p>So lange wie s lebt. Warum sollte das hier anders sein, als bei irgendeinem anderen Zeiger in einem anderen Objekt, was die Speicherverwaltung übernimmt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2468182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2468182</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Wed, 16 Sep 2015 14:55:16 GMT</pubDate></item><item><title><![CDATA[Reply to Lebenszeit von string::c_str() on Wed, 16 Sep 2015 15:03:50 GMT]]></title><description><![CDATA[<p>Der c-string bleibt solange gültig bis der std::string zerstört wird oder eine seiner non-const Memberfunktion aufgerufen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2468185</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2468185</guid><dc:creator><![CDATA[DarkShadow44]]></dc:creator><pubDate>Wed, 16 Sep 2015 15:03:50 GMT</pubDate></item><item><title><![CDATA[Reply to Lebenszeit von string::c_str() on Wed, 16 Sep 2015 15:47:20 GMT]]></title><description><![CDATA[<p>genau dieses Beispiel oben ist unzulaessig. Der std::string wird beim Verlassen der Funtion zerstoert und damit der pointer ungueltig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2468192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2468192</guid><dc:creator><![CDATA[TheBigW]]></dc:creator><pubDate>Wed, 16 Sep 2015 15:47:20 GMT</pubDate></item><item><title><![CDATA[Reply to Lebenszeit von string::c_str() on Wed, 16 Sep 2015 16:18:08 GMT]]></title><description><![CDATA[<p>DarkShadow44 schrieb:</p>
<blockquote>
<p>Der c-string bleibt solange gültig bis der std::string zerstört wird oder eine seiner non-const Memberfunktion aufgerufen wird.</p>
</blockquote>
<p>So ist es. Die übliche Verwendung von <code>std::string::c_str()</code> bei temporären Objekten à la</p>
<pre><code class="language-cpp">std::FILE* file = std::fopen((filename + &quot;.png&quot;).c_str(), &quot;wb&quot;);
</code></pre>
<p>funktioniert, weil temporäre Objekte bis zum Abschluß des Statements leben; es wird erst <code>fopen()</code> aufgerufen, dann das temporäre Objekt zerstört.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2468195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2468195</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Wed, 16 Sep 2015 16:18:08 GMT</pubDate></item><item><title><![CDATA[Reply to Lebenszeit von string::c_str() on Fri, 18 Sep 2015 08:16:47 GMT]]></title><description><![CDATA[<p>DarkShadow44 schrieb:</p>
<blockquote>
<p>So lange wie s lebt.</p>
</blockquote>
<p>Nein. Die Doku sagt:<br />
&quot;The pointer returned may be invalidated by further calls to other member functions that modify the object.&quot; Wenn man den String ueber seine aktuelle capacity verlaengert, wird der pointer auf jeden Fall ungueltig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2468373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2468373</guid><dc:creator><![CDATA[TGGC]]></dc:creator><pubDate>Fri, 18 Sep 2015 08:16:47 GMT</pubDate></item><item><title><![CDATA[Reply to Lebenszeit von string::c_str() on Fri, 18 Sep 2015 08:47:03 GMT]]></title><description><![CDATA[<p>TGGC schrieb:</p>
<blockquote>
<p>&lt;del&gt;DarkShadow44&lt;/del&gt;Jockelx schrieb:</p>
<blockquote>
<p>So lange wie s lebt.</p>
</blockquote>
</blockquote>
<p>FTFY</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2468375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2468375</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 18 Sep 2015 08:47:03 GMT</pubDate></item><item><title><![CDATA[Reply to Lebenszeit von string::c_str() on Fri, 18 Sep 2015 09:03:38 GMT]]></title><description><![CDATA[<p>TGGC schrieb:</p>
<blockquote>
<p>DarkShadow44 schrieb:</p>
<blockquote>
<p>So lange wie s lebt.</p>
</blockquote>
<p>Nein.</p>
</blockquote>
<p>Ja, bin nur darauf eingegangen, warum der Pointer hier auf wundersame Weise länger als s leben sollte.<br />
Hätte ein 'höchstens' einfügen sollen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2468378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2468378</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Fri, 18 Sep 2015 09:03:38 GMT</pubDate></item></channel></rss>