<?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[String nach cahr* kasten]]></title><description><![CDATA[<p>Hi,</p>
<p>könnt ihr mir sagen wie ich ein String nach char* casten kann?</p>
<p>gruss bbm</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/167015/string-nach-cahr-kasten</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 18:15:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/167015.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 Dec 2006 16:08:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to String nach cahr* kasten on Tue, 05 Dec 2006 16:08:02 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>könnt ihr mir sagen wie ich ein String nach char* casten kann?</p>
<p>gruss bbm</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187412</guid><dc:creator><![CDATA[BigBossMike]]></dc:creator><pubDate>Tue, 05 Dec 2006 16:08:02 GMT</pubDate></item><item><title><![CDATA[Reply to String nach cahr* kasten on Tue, 05 Dec 2006 16:11:17 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::string wort(&quot;Huuuh?&quot;);
wort.c_str();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1187416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187416</guid><dc:creator><![CDATA[Panke]]></dc:creator><pubDate>Tue, 05 Dec 2006 16:11:17 GMT</pubDate></item><item><title><![CDATA[Reply to String nach cahr* kasten on Tue, 05 Dec 2006 16:27:48 GMT]]></title><description><![CDATA[<p>Vorsicht, sieh den Pointer den Du als Rückgabe von <em>std::string::c_str( )</em> bekommst lieber als <em>_const_ char</em>* an!</p>
<p>Greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187429</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Tue, 05 Dec 2006 16:27:48 GMT</pubDate></item><item><title><![CDATA[Reply to String nach cahr* kasten on Tue, 05 Dec 2006 16:25:40 GMT]]></title><description><![CDATA[<p>Panke schrieb:</p>
<blockquote>
<pre><code class="language-cpp">std::string wort(&quot;Huuuh?&quot;);
wort.c_str();
</code></pre>
</blockquote>
<p>Das Problem ist manchmal, dass hier auf ein char const* gecastet wird.<br />
Auf ein (nonconst) char* geht's nicht. Aber man kann natürlich ein char[] entsprechend füllen und nach Veränderung in den string zurückkopieren.</p>
<pre><code class="language-cpp">std::string wort(&quot;Huuuh?&quot;);

// string -&gt; char
char *c = new char[wort.length()+1];
strncpy(c, wort.c_str(), wort.length()); //aus cstring

// char benutzen 
c[1] = 'a';

// string -&gt; char 
wort = std::string(c);

// aufräumen
delete[] c;
</code></pre>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187430</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 05 Dec 2006 16:25:40 GMT</pubDate></item><item><title><![CDATA[Reply to String nach cahr* kasten on Tue, 05 Dec 2006 16:28:23 GMT]]></title><description><![CDATA[<p>Na dann sollte man noch erwähnen:</p>
<p>Wenn man garantieren kann, das nur gelesen wird, kann man noch einen const_cast ansetzen um das Ergebnis passend zu machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187433</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Tue, 05 Dec 2006 16:28:23 GMT</pubDate></item><item><title><![CDATA[Reply to String nach cahr* kasten on Tue, 05 Dec 2006 16:40:37 GMT]]></title><description><![CDATA[<p>Knuddlbaer schrieb:</p>
<blockquote>
<p>Na dann sollte man noch erwähnen:</p>
<p>Wenn man garantieren kann, das nur gelesen wird, kann man noch einen const_cast ansetzen um das Ergebnis passend zu machen.</p>
</blockquote>
<p>Ach, wenn man garantieren kann, dass nur gelesen wird, sollte man &quot;char const*&quot; verwenden ! <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>
<p>Gruß,</p>
<p>Simon2.</p>
<p>P.S.: Jaja, ich weiß: Es gibt viele schlechte Schnittstellen....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187442</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 05 Dec 2006 16:40:37 GMT</pubDate></item><item><title><![CDATA[Reply to String nach cahr* kasten on Tue, 05 Dec 2006 16:59:36 GMT]]></title><description><![CDATA[<p>Na wenn wir schon die Goldwaage auspacken, sei angemerkt, das</p>
<p>.c_str() nicht auf const value_type * castet sondern const value_type * zurück gibt - zumal in der Fragestellung nach char* verlangt wurde ;o)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187454</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Tue, 05 Dec 2006 16:59:36 GMT</pubDate></item><item><title><![CDATA[Reply to String nach cahr* kasten on Wed, 06 Dec 2006 07:10:07 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/734">@Simon</a>: Dein Beispiel ist aber arg konstruiert - diese direkte Modifikation kann auch (und wesentlich sicherer) auf dem String erledigt werden.</p>
<p>Und const_cast sollte nur ein letzter Ausweg sein, wenn du eine schlecht designte externe Funktion verwenden willst, die auf einen 'char*' nur lesend zugreifen will (normalerweise sollten solche Funktionen ihre Parameter als 'const char*' erwarten).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187668</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 06 Dec 2006 07:10:07 GMT</pubDate></item><item><title><![CDATA[Reply to String nach cahr* kasten on Wed, 06 Dec 2006 08:14:32 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/734">@Simon</a>: Dein Beispiel ist aber arg konstruiert - diese direkte Modifikation kann auch (und wesentlich sicherer) auf dem String erledigt werden....</p>
</blockquote>
<p>Es ging mir eigentlich um den Aufruf einer &quot;C-String-Funktion&quot;; typische String-Funktionen (wie das reine Setzen eines einzelnen Characters in meinem Beispiel) können auf jeden Fall mit std::strings besser gemacht werden.</p>
<p>Wichtig war mir dabei das &quot;...char benutzen ...&quot;, nicht die Codezeile. Und gebracht habe ich das, weil es hier immer wieder Leute gibt, die meinen, in ihrem Programm müssten sie mit char* arbeiten, weil sie irgendwo eine Funktion nutzen müssen, die einen char* entgegennimmt.<br />
Ich dagegen will gerade zur Verwendung von std::string motivieren .... indem ich zeige, wie man dann trotzdem die char*-Funktion nutzen kann.</p>
<p>OK, päppele ich das Ganze nochmal auf:</p>
<pre><code class="language-cpp">// nimmt (evtl. auch schreibend) eine Zeichenkette als char* entgegen
// ... auf Implementation habe ich keinen Einfluß; sehe sie vllt. nichtmal
extern void fremdeAPIFunktion(char*);

std::string wort(&quot;Huuuh?&quot;);

// string -&gt; char
char *c = new char[wort.length()+1];
strncpy(c, wort.c_str(), wort.length()); //aus cstring

// char benutzen 
fremdeAPIFunktion(c);

// string -&gt; char 
wort = std::string(c);

// aufräumen
delete[] c;
</code></pre>
<p>Ergo: IMMER std::string NEHMEN !!! und nur dort, wo man unbedingt einen char* braucht, nach obigem Schema Hin- und Herkonvertieren !</p>
<p>Besser ? <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>
<p>Gruß,</p>
<p>Simon2.</p>
<p>P.S.:</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>...<br />
Und const_cast sollte nur ein letzter Ausweg sein, wenn du eine schlecht designte externe Funktion verwenden willst, die auf einen 'char*' nur lesend zugreifen will (normalerweise sollten solche Funktionen ihre Parameter als 'const char*' erwarten).</p>
</blockquote>
<p>const_cast würde ich zugunsten der obigen &quot;Kopierversion&quot; vermeiden - man kann nie wissen, was Leute, die kein const kennen, mit dem Speicher wirklich anstellen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187688</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187688</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 06 Dec 2006 08:14:32 GMT</pubDate></item><item><title><![CDATA[Reply to String nach cahr* kasten on Wed, 06 Dec 2006 08:30:36 GMT]]></title><description><![CDATA[<p>Nun, man hat halt nicht immer den Einfluss darauf was der Fragende machen will. Richtig ist deutlichst darauf hinzuweisen, das die Rückgabe von c_str() nur für Lesezugriffe gedacht ist.</p>
<p>IMHO falsch ist aber die Aussage: &quot;IMMER std::string NEHMEN&quot; , wenn man sehr viel mit Funktionen arbeiten muss die char* erwarten, könnte man ja auch in betracht ziehen einen vector&lt;char&gt; zu verwenden und könnte sich das new und delete sparen....</p>
<p>Aber eigentlich ists wurscht, die Antwort auf die 1 Frage gab es ja <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1187701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1187701</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Wed, 06 Dec 2006 08:30:36 GMT</pubDate></item></channel></rss>