<?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[Elegante toString Funktion]]></title><description><![CDATA[<p>Wie kann man am elegantesten eine Funktion schreiben, die beliebige Daten in einen char* umwandelt?</p>
<p>Im Moment mache ich es so:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
char* toString(T data, char* string) { 
	ostringstream stream;
	stream &lt;&lt; data;
	return strcpy(string, stream.str().c_str());
}
</code></pre>
<p>Aber das gefällt mir nicht, da der Aufrufer die Länge des strings kennen muss. Einfach den stream.str().c_str() zurückgeben geht nicht und Speicher möchte ich auf keinen Fall in der Funktion reservieren.<br />
Geht das irgendwie eleganter?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/190667/elegante-tostring-funktion</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 18:37:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/190667.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 24 Aug 2007 23:23:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Elegante toString Funktion on Fri, 24 Aug 2007 23:23:45 GMT]]></title><description><![CDATA[<p>Wie kann man am elegantesten eine Funktion schreiben, die beliebige Daten in einen char* umwandelt?</p>
<p>Im Moment mache ich es so:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
char* toString(T data, char* string) { 
	ostringstream stream;
	stream &lt;&lt; data;
	return strcpy(string, stream.str().c_str());
}
</code></pre>
<p>Aber das gefällt mir nicht, da der Aufrufer die Länge des strings kennen muss. Einfach den stream.str().c_str() zurückgeben geht nicht und Speicher möchte ich auf keinen Fall in der Funktion reservieren.<br />
Geht das irgendwie eleganter?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1351578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1351578</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Fri, 24 Aug 2007 23:23:45 GMT</pubDate></item><item><title><![CDATA[Reply to Elegante toString Funktion on Fri, 24 Aug 2007 23:32:52 GMT]]></title><description><![CDATA[<p>Wenn du in der Funktion keinen Speicher reservieren willst, dann sicher nicht ...<br />
Aber wo liegt überhaupt dein Problem?<br />
Ich meine, einen Tod musst du sterben - und in der Funktion kannst du über den std::string stream.str() alles rausfinden, was du brauchst und wieso überhaupt in char* ? Mit std::string zu arbeiten ist viel sinnvoller, schließlich programmieren wir hier in C++ oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1351585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1351585</guid><dc:creator><![CDATA[Checker*amp*Murckser]]></dc:creator><pubDate>Fri, 24 Aug 2007 23:32:52 GMT</pubDate></item><item><title><![CDATA[Reply to Elegante toString Funktion on Fri, 24 Aug 2007 23:38:54 GMT]]></title><description><![CDATA[<p>Ich MUSS mit char* arbeiten (WinApi). Naja, ich finds halt ziemlich grausig, dass der Nutzer immer wissen muss wie viel Speicher er reservieren muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1351590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1351590</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Fri, 24 Aug 2007 23:38:54 GMT</pubDate></item><item><title><![CDATA[Reply to Elegante toString Funktion on Fri, 24 Aug 2007 23:42:19 GMT]]></title><description><![CDATA[<p>eher mit const char* oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1351591</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1351591</guid><dc:creator><![CDATA[........]]></dc:creator><pubDate>Fri, 24 Aug 2007 23:42:19 GMT</pubDate></item><item><title><![CDATA[Reply to Elegante toString Funktion on Fri, 24 Aug 2007 23:46:58 GMT]]></title><description><![CDATA[<p>this-&gt;that schrieb:</p>
<blockquote>
<p>Ich MUSS mit char* arbeiten (WinApi). Naja, ich finds halt ziemlich grausig, dass der Nutzer immer wissen muss wie viel Speicher er reservieren muss.</p>
</blockquote>
<p>nun ja, wie gesagt, du kannst die Speicherbeschaffung auch von deiner Funktion erledigen lassen und auch mit ner anderen Funktion freigeben - du könntest das auch in ner Klasse kapseln, die dann die Speicherverwaltung für den Anwender erledigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1351592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1351592</guid><dc:creator><![CDATA[Checker*amp*Murckser]]></dc:creator><pubDate>Fri, 24 Aug 2007 23:46:58 GMT</pubDate></item><item><title><![CDATA[Reply to Elegante toString Funktion on Sat, 25 Aug 2007 01:01:21 GMT]]></title><description><![CDATA[<p>Wenn du mit der WinAPI arbeiten musst - schreib dir doch eine String Klasse für char*.</p>
<p>Das Problem ist:<br />
std::string und char* sind nicht miteinander austauschbar. Warum also nicht eine string Klasse verwenden die es ist?</p>
<p>ein kleiner ansatz ist zum Beispiel<br />
vector&lt;char&gt;</p>
<p>Hier kann man immerhin schon so sachen wie<br />
foo(&amp;vec[0]);<br />
schreiben wenn man einen Buffer braucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1351609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1351609</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sat, 25 Aug 2007 01:01:21 GMT</pubDate></item><item><title><![CDATA[Reply to Elegante toString Funktion on Sat, 25 Aug 2007 07:06:18 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>Hier kann man immerhin schon so sachen wie<br />
foo(&amp;vec[0]);<br />
schreiben wenn man einen Buffer braucht.</p>
</blockquote>
<p>kann der string doch auch. es wurde immerhin im 2003 standard festgelegt, dass der string die daten am stück speichert(mal davon abgesehen, dass eh alle implementationen genauso arbeiten).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1351629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1351629</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sat, 25 Aug 2007 07:06:18 GMT</pubDate></item><item><title><![CDATA[Reply to Elegante toString Funktion on Sat, 25 Aug 2007 07:08:55 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>kann der string doch auch. es wurde immerhin im 2003 standard festgelegt, dass der string die daten am stück speichert(mal davon abgesehen, dass eh alle implementationen genauso arbeiten).</p>
</blockquote>
<p>Oh, Du hast diesen Passus für std::string gefunden? Wir haben diese Zusage bisher immer nur für std::vector finden können. Sag doch mal bitte den Abschnitt in dem das steht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1351630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1351630</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Sat, 25 Aug 2007 07:08:55 GMT</pubDate></item><item><title><![CDATA[Reply to Elegante toString Funktion on Sat, 25 Aug 2007 07:33:13 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>otze schrieb:</p>
<blockquote>
<p>kann der string doch auch. es wurde immerhin im 2003 standard festgelegt, dass der string die daten am stück speichert(mal davon abgesehen, dass eh alle implementationen genauso arbeiten).</p>
</blockquote>
<p>Oh, Du hast diesen Passus für std::string gefunden? Wir haben diese Zusage bisher immer nur für std::vector finden können. Sag doch mal bitte den Abschnitt in dem das steht.</p>
</blockquote>
<p>hmm du hast recht. ich war mir 100% sicher, dass ich erst vor einem monat hier einen thread zum thema string gefunden hab, wo irgendeiner der großen genau das gesagt hat. *grübel*. Naja, ich konnte es jetzt auch nicht finden. simply ignore me.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1351635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1351635</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sat, 25 Aug 2007 07:33:13 GMT</pubDate></item><item><title><![CDATA[Reply to Elegante toString Funktion on Sat, 25 Aug 2007 07:38:25 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>simply ignore me.</p>
</blockquote>
<p>Done.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1351637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1351637</guid><dc:creator><![CDATA[that-&amp;gt;this]]></dc:creator><pubDate>Sat, 25 Aug 2007 07:38:25 GMT</pubDate></item><item><title><![CDATA[Reply to Elegante toString Funktion on Sat, 25 Aug 2007 11:27:57 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>mal davon abgesehen, dass eh alle implementationen genauso arbeiten</p>
</blockquote>
<p>Sicher? Es gibt in einigen Anwendungsbereichen durchaus Fürhalten für die Implementierng eines Strings als verkettete Liste und wenn der C++-Standard das Verhalten nicht festlegt könnte ich mir durchaus vorstellen, dass es entsprechend spezialisierte Implementierungen gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1351738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1351738</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sat, 25 Aug 2007 11:27:57 GMT</pubDate></item><item><title><![CDATA[Reply to Elegante toString Funktion on Sat, 25 Aug 2007 11:35:40 GMT]]></title><description><![CDATA[<blockquote>
<p>template&lt;class T&gt;<br />
char* toString(T data, char* string) {<br />
ostringstream stream;<br />
stream &lt;&lt; data;<br />
return strcpy(string, stream.str().c_str());<br />
}</p>
</blockquote>
<p>C od. C++?<br />
strcpy is C Function</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1351742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1351742</guid><dc:creator><![CDATA[netrobot]]></dc:creator><pubDate>Sat, 25 Aug 2007 11:35:40 GMT</pubDate></item><item><title><![CDATA[Reply to Elegante toString Funktion on Sat, 25 Aug 2007 13:25:53 GMT]]></title><description><![CDATA[<p>Du kannst die Funktion gerne umschreiben, so dass sie zu 100% C++ ist. <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/1351818</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1351818</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Sat, 25 Aug 2007 13:25:53 GMT</pubDate></item><item><title><![CDATA[Reply to Elegante toString Funktion on Sat, 25 Aug 2007 13:30:38 GMT]]></title><description><![CDATA[<p>this-&gt;that schrieb:</p>
<blockquote>
<p>Du kannst die Funktion gerne umschreiben, so dass sie zu 100% C++ ist. <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>
</blockquote>
<p>Ja, und am einfachsten ginge das, indem Du den char*-Speicher vernünftig kapselst, wie hier vorgeschlagen wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1351819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1351819</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sat, 25 Aug 2007 13:30:38 GMT</pubDate></item><item><title><![CDATA[Reply to Elegante toString Funktion on Sat, 25 Aug 2007 13:31:50 GMT]]></title><description><![CDATA[<p>Warum schreibst du dir nicht einen Stream (bzw. einen Puffer), der ein char* aufnimmt und auf diesen schreibt? Dann brauchst du nicht diesen suspekten Umweg über eine Funktion mit viel Krimskrams drin zu gehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1351822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1351822</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Sat, 25 Aug 2007 13:31:50 GMT</pubDate></item><item><title><![CDATA[Reply to Elegante toString Funktion on Sat, 25 Aug 2007 13:36:45 GMT]]></title><description><![CDATA[<p>Sag mal bitte um welche WinAPI Funktion es geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1351826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1351826</guid><dc:creator><![CDATA[kleine bitte]]></dc:creator><pubDate>Sat, 25 Aug 2007 13:36:45 GMT</pubDate></item><item><title><![CDATA[Reply to Elegante toString Funktion on Mon, 27 Aug 2007 07:04:57 GMT]]></title><description><![CDATA[<p>this-&gt;that schrieb:</p>
<blockquote>
<p>Ich MUSS mit char* arbeiten (WinApi). Naja, ich finds halt ziemlich grausig, dass der Nutzer immer wissen muss wie viel Speicher er reservieren muss.</p>
</blockquote>
<p>? Die Benutzung von WinAPI verbietet den Einsatz von std::string ? Sollte mich schwer wundern.</p>
<p>Allerdings ist es ein Leichtes (und ich würde es definitv tun), mit std::string zu &quot;arbeiten&quot; (also in seinem Code) und eine string2char()-Wandlung vor dem Aufruf der WinAPI-Funktion vorzunehmen (z.B. über eine ensprechende Klasse, WinAPI-Call vielleicht sogar gekapselt).<br />
Und für char const* reicht sowieso c_str().</p>
<p>Sorry, ich halte dieses &quot;ich muss mit char* arbeiten, weil ich ja WinAPI mache&quot;-Argument für falsch und oftmals vorgeschoben, weil man selbst char* präferriert (... und dann hier genau die Fragen stellt, für deren Lösung string ja entwickelt wurde).</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1352715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1352715</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 27 Aug 2007 07:04:57 GMT</pubDate></item></channel></rss>