<?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[c_str() returnen, Syntax gesucht]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab eine Funktion die soll einen const char* zurückliefern. In der Funktion wird mit einem string gearbeitet, der dort lokal angelegt wird. Am Ende wird dann string.c_str() zurückgeliefert, was aber nur &quot;Müll&quot; bringt.</p>
<p>Ich nehme an ich muss vorher irgendwie ein char* mit new anlegen und das zurückliefern, nur wie sieht die syntax genau aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/192714/c_str-returnen-syntax-gesucht</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 14:44:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/192714.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 17 Sep 2007 19:31:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to c_str() returnen, Syntax gesucht on Mon, 17 Sep 2007 19:31:54 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab eine Funktion die soll einen const char* zurückliefern. In der Funktion wird mit einem string gearbeitet, der dort lokal angelegt wird. Am Ende wird dann string.c_str() zurückgeliefert, was aber nur &quot;Müll&quot; bringt.</p>
<p>Ich nehme an ich muss vorher irgendwie ein char* mit new anlegen und das zurückliefern, nur wie sieht die syntax genau aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1367295</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1367295</guid><dc:creator><![CDATA[hdfhdgh]]></dc:creator><pubDate>Mon, 17 Sep 2007 19:31:54 GMT</pubDate></item><item><title><![CDATA[Reply to c_str() returnen, Syntax gesucht on Mon, 17 Sep 2007 19:50:49 GMT]]></title><description><![CDATA[<p>Die elegante Variante wäre einfach direkt den String by-value zurueckgeben.<br />
Wenn nicht möglich: char-Array allozieren und per strcpy den internen String hinein kopieren. Allerdings muss man dann das Array ausserhalb freigeben(man könnte auch auto_ptr benutzen).</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1367301</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1367301</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Mon, 17 Sep 2007 19:50:49 GMT</pubDate></item><item><title><![CDATA[Reply to c_str() returnen, Syntax gesucht on Mon, 17 Sep 2007 19:51:17 GMT]]></title><description><![CDATA[<p>Das solltest du anders machen. Dass nur Müll zurückkommt sollte logisch sein, schließlich wird der lokale String beim Verlassen der Funktion kaputtgemacht; der Zeiger auf den Inhalt ist dann natürlich wertlos.<br />
Warum gibst du nicht einfach einen normalen String zurück, also so:</p>
<pre><code class="language-cpp">string retbla()
{
   string s;
   s = &quot;lasndlansdlnasdlnasd&quot;;
   return s;
}
</code></pre>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1367302</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1367302</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Mon, 17 Sep 2007 19:51:17 GMT</pubDate></item><item><title><![CDATA[Reply to c_str() returnen, Syntax gesucht on Mon, 17 Sep 2007 20:26:55 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Warum gibst du nicht einfach einen normalen String zurück...<br />
?</p>
</blockquote>
<p>vielleicht wegen der damit verbundenen kopieroperation?<br />
<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/1367321</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1367321</guid><dc:creator><![CDATA[Undertaker]]></dc:creator><pubDate>Mon, 17 Sep 2007 20:26:55 GMT</pubDate></item><item><title><![CDATA[Reply to c_str() returnen, Syntax gesucht on Mon, 17 Sep 2007 20:34:19 GMT]]></title><description><![CDATA[<p>Da gibts doch so eine Return-Value-Optimization, die macht das schon <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>
<p>Ne im Ernst, ich halte es für definitiv schwachsinnig, sich in der Sprache so derart einzuschränken und keine Objekte mehr zurückzugeben. Erstens ist das Mikro-Optimierung und zweitens sollte das den Compiler und nicht den Programmierer kümmern.<br />
Und bevor man mit Pointern, new, delete oder auto_ptrn rumfuchtelt, sollte man doch eher den String als Referenz übergeben und so füllen lassen. Wenn man denn schon keine Return-Werte nutzen will <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1367323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1367323</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Mon, 17 Sep 2007 20:34:19 GMT</pubDate></item><item><title><![CDATA[Reply to c_str() returnen, Syntax gesucht on Mon, 17 Sep 2007 22:52:59 GMT]]></title><description><![CDATA[<p>Badestrand, der Compiler *kann* sich in vielen Fällen nicht darum kümmern, das lässt der derzeitige Standard nicht zu.</p>
<p>Und ob die Optimierung es wert ist oder nicht hängt davon ab wo der Code verwendet wird.</p>
<p>Was das per-mutable-Referenz-Übergeben angeht muss ich dir Recht geben, das ist wirklich oft eine gute Möglichkeit. Ob's was bringt kommt allerdings auch wieder sehr darauf an wie die Funktion verwendet wird -- allerdings KANN es eben manchmal wirklich was bringen.</p>
<p>Ich bin auch gegen vorzeitige Optimierungen, bloss gewisse Dinge gleich generell als &quot;Mikro-Optimierung&quot; abzutun und zu sagen &quot;soll doch der Compiler sich darum kümmern&quot; ... ist etwas zu einfach.</p>
<p>Davon abgesehen: schonmal an die Möglichkeit gedacht dass das Interface welches zu implementieren ist eventuell fix vorgegeben sein könnte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1367360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1367360</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 17 Sep 2007 22:52:59 GMT</pubDate></item><item><title><![CDATA[Reply to c_str() returnen, Syntax gesucht on Mon, 17 Sep 2007 23:37:26 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Ich bin auch gegen vorzeitige Optimierungen, bloss gewisse Dinge gleich generell als &quot;Mikro-Optimierung&quot; abzutun und zu sagen &quot;soll doch der Compiler sich darum kümmern&quot; ... ist etwas zu einfach.</p>
</blockquote>
<p>Ich finde nicht, dass es die Aufgabe eines Programmierers ist, sich wegen solchen Sächelchen zu sorgen. Wenn man generell performanten Code will, muss man wohl oder übel auf Rückgabewerte verzichten, es sei denn es handelt sich um kleine PODs. Strings dürfte man dann ja nie zurückgeben.<br />
<em>Wenn</em> es dann mal auf Geschwindigkeit ankommt, und das ist wohl nur sehr selten der Fall, dann kann man immer noch die Schwachstelle suchen. Wenn der Geschwindigkeits-Einbruch dann daran liegt, dass ein 34 MB großer String von Funktion zu Funktion hin- und her-zurückgegeben wird, reicht man halt einen const char*, String-Pointer oder wasauchimmer herum.<br />
Ansonsten wären wir alle wieder bei C und würden für unsere Programme 100 mal so viel Zeit brauchen.</p>
<p>Gerade Anfänger fragen ja immer wieder, wie dies und das schneller geht. Und das wahrscheinlich in einem kleinen Konsolen-Text-Abenteuer. Da ist es generell wichtig, dass man Ergebnisse sieht und alles läuft, aber nicht, ob der Copy-Konstruktor einmal zuviel aufgerufen wird. Überhaupt sehe ich da eine starke Doppelmoral, denn irgendwie scheint niemand Probleme mit den stl-Containern zu haben, gerade der vector erzeugt bei zehn pushs ja 100 Kopien.</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Davon abgesehen: schonmal an die Möglichkeit gedacht dass das Interface welches zu implementieren ist eventuell fix vorgegeben sein könnte?</p>
</blockquote>
<p>Dat versteh ich nich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1367366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1367366</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Mon, 17 Sep 2007 23:37:26 GMT</pubDate></item></channel></rss>