<?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.c_str() und char *]]></title><description><![CDATA[<p>Hi,</p>
<p>std::string.c_str() liefert mir ja einen const char *, was auch ok ist.</p>
<p>Nun brauch ich allerdings gezwungener maßen einen char *.<br />
Mir fallen auf anhieb zwei Wege ein, einer davon ist wohl ziemlich schlecht und zwar das const wegcasten.</p>
<p>Der andere wäre wohl ein strcpy, wenn ich das richtig verstehe.</p>
<p>Gibt es noch andere Möglichkeiten? char * darf bei mir nicht const sein.</p>
<p>Nochwas: Für strcpy muss der speicher in der passenden Größe bereits alloziiert sein, dass ist doch richtig, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/226089/string-c_str-und-char</link><generator>RSS for Node</generator><lastBuildDate>Thu, 01 Oct 2026 03:00:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/226089.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 29 Oct 2008 10:50:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to string.c_str() und char * on Wed, 29 Oct 2008 10:50:52 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>std::string.c_str() liefert mir ja einen const char *, was auch ok ist.</p>
<p>Nun brauch ich allerdings gezwungener maßen einen char *.<br />
Mir fallen auf anhieb zwei Wege ein, einer davon ist wohl ziemlich schlecht und zwar das const wegcasten.</p>
<p>Der andere wäre wohl ein strcpy, wenn ich das richtig verstehe.</p>
<p>Gibt es noch andere Möglichkeiten? char * darf bei mir nicht const sein.</p>
<p>Nochwas: Für strcpy muss der speicher in der passenden Größe bereits alloziiert sein, dass ist doch richtig, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1606523</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1606523</guid><dc:creator><![CDATA[Seikilos]]></dc:creator><pubDate>Wed, 29 Oct 2008 10:50:52 GMT</pubDate></item><item><title><![CDATA[Reply to string.c_str() und char * on Wed, 29 Oct 2008 10:52:33 GMT]]></title><description><![CDATA[<p>Wieso darf das char* nicht konst sein? Wird es definitiv geändert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1606524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1606524</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 29 Oct 2008 10:52:33 GMT</pubDate></item><item><title><![CDATA[Reply to string.c_str() und char * on Wed, 29 Oct 2008 10:59:42 GMT]]></title><description><![CDATA[<p>Wenn die Antwort auf Tachyons (zweite) Frage &quot;ja&quot; lautet:</p>
<p>Du kannst statt eines manuell allokierten Puffers std::vector nehmen, der übernimmt die Aufgabe der Allokation für Dich. Den String in diesen Puffer zu kopieren geht dann wiederum in zwölf verschiedenen Varianten. Hier sind zwei:</p>
<pre><code class="language-cpp">vector&lt;char&gt; buffer( str.begin(), str.end() );
buffer.push_back( '\0' ); // nullbyte dranhängen

// oder

vector&lt;char&gt; buffer( str.c_str(), str.c_str() + str.size() + 1 ); // erzeugung aus c_str, +1 wegen dem Nullbyte

// benutzen:

char* c_buffer = &amp;buffer[0];
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1606527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1606527</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 29 Oct 2008 10:59:42 GMT</pubDate></item><item><title><![CDATA[Reply to string.c_str() und char * on Wed, 29 Oct 2008 11:41:17 GMT]]></title><description><![CDATA[<p>Tachyon, keine Ahnung, aber der Teil wird generiert und nicht von mir, daher habe ich keinen Einfluss drauf.</p>
<p>Zu dem vector: Warum muss der Null Terminator eigentlich dran? Wenn ich ein char * alloziiere, muss da auch keiner hin, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1606541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1606541</guid><dc:creator><![CDATA[Seikilos]]></dc:creator><pubDate>Wed, 29 Oct 2008 11:41:17 GMT</pubDate></item><item><title><![CDATA[Reply to string.c_str() und char * on Wed, 29 Oct 2008 11:46:36 GMT]]></title><description><![CDATA[<p>Seikilos schrieb:</p>
<blockquote>
<p>Zu dem vector: Warum muss der Null Terminator eigentlich dran? Wenn ich ein char * alloziiere, muss da auch keiner hin, oder?</p>
</blockquote>
<p>c-strings sind immer nullterminiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1606544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1606544</guid><dc:creator><![CDATA[immer]]></dc:creator><pubDate>Wed, 29 Oct 2008 11:46:36 GMT</pubDate></item><item><title><![CDATA[Reply to string.c_str() und char * on Wed, 29 Oct 2008 11:47:56 GMT]]></title><description><![CDATA[<p>Seikilos schrieb:</p>
<blockquote>
<p>Tachyon, keine Ahnung, aber der Teil wird generiert und nicht von mir, daher habe ich keinen Einfluss drauf.</p>
<p>Zu dem vector: Warum muss der Null Terminator eigentlich dran? Wenn ich ein char * alloziiere, muss da auch keiner hin, oder?</p>
</blockquote>
<p>Für C-Strings muss der immer mit rein. Sofern irgendwas mit C-Strings arbeitet, wird die Länge des Strings immer über Such nach dem terminierenden 0-Zeichen ermittelt.<br />
Auch wenn Du manuell Speicher für z.B. 10 sichtbare Zeichen allokierst, brauchst Du insgesamt 11 Zeichen, wegen der 0-Terminierung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1606546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1606546</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 29 Oct 2008 11:47:56 GMT</pubDate></item><item><title><![CDATA[Reply to string.c_str() und char * on Wed, 29 Oct 2008 11:48:11 GMT]]></title><description><![CDATA[<p>Seikilos schrieb:</p>
<blockquote>
<p>Zu dem vector: Warum muss der Null Terminator eigentlich dran? Wenn ich ein char * alloziiere, muss da auch keiner hin, oder?</p>
</blockquote>
<p>Wenn es sich um binäre Daten handelt, die mit Längenangaben übergeben werden, dann muss natürlich kein zusätzlicher Nullterminator dran. Da Du aber selbst von strcpy gesprochen hast, nahm ich an, es geht um C-Strings. Und die sind, ja, immer nullterminiert.</p>
<p>(Und wenn Du den Platz fürs Nullbyte nicht reservierst und anschließend strcpy benutzt, hast Du einen klassischen Buffer Overflow, verursacht durch einen off-by-one-Fehler)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1606547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1606547</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 29 Oct 2008 11:48:11 GMT</pubDate></item><item><title><![CDATA[Reply to string.c_str() und char * on Wed, 29 Oct 2008 11:59:37 GMT]]></title><description><![CDATA[<p>Danke für die Erklärung.</p>
<p>Sollte man dann strcpy_s fürs Kopieren benutzen? benutzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1606557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1606557</guid><dc:creator><![CDATA[Seikilos]]></dc:creator><pubDate>Wed, 29 Oct 2008 11:59:37 GMT</pubDate></item><item><title><![CDATA[Reply to string.c_str() und char * on Wed, 29 Oct 2008 12:02:36 GMT]]></title><description><![CDATA[<p>Seikilos schrieb:</p>
<blockquote>
<p>Danke für die Erklärung.</p>
<p>Sollte man dann strcpy_s fürs Kopieren benutzen? benutzen?</p>
</blockquote>
<p>Wenn Du willst, dass Dein Code Standardkonform ist, nein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1606560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1606560</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 29 Oct 2008 12:02:36 GMT</pubDate></item><item><title><![CDATA[Reply to string.c_str() und char * on Wed, 29 Oct 2008 12:03:28 GMT]]></title><description><![CDATA[<p>Seikilos schrieb:</p>
<blockquote>
<p>Sollte man dann strcpy_s fürs Kopieren benutzen? benutzen?</p>
</blockquote>
<p>Kenn ich nicht, was soll das sein?</p>
<p>(Ok, ich gebe zu, ich kenne strcpy_s doch. Aber die Tatsache, dass ich es zu leugnen versuche, sollte Dir die Frage bereits beantworten. Im Zweifel schau immer nach, ob die Funktion zu <strong>Standard</strong> C++ gehört. Microsoft-Erweiterungen gehören nicht dazu.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1606561</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1606561</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 29 Oct 2008 12:03:28 GMT</pubDate></item><item><title><![CDATA[Reply to string.c_str() und char * on Wed, 29 Oct 2008 12:03:58 GMT]]></title><description><![CDATA[<p>Wenn du stumpf kopieren willst (ohne Nullbyte) und dir die Länge bekannt ist, kannst du std::memcpy verwenden oder besser: std::copy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1606562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1606562</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Wed, 29 Oct 2008 12:03:58 GMT</pubDate></item></channel></rss>