<?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[Einzelheiten zur Umwandlung von Char-Array nach String]]></title><description><![CDATA[<p>Hallo alle,</p>
<p>bin heute über folgendes Phänomen gestolpert: Ich wollte ein C-Char-Array in einen String konvertieren und anschließend wieder zurück. Dabei ist mir dann irgend wann mal aufgefallen, dass die Char-Array-Größe nach der Rückkonvertierung erheblich kleiner ist als zu Beginn.</p>
<p>Wenn ich es per</p>
<pre><code>std::string ret;
	for (int i = 0; i != Length+1; i++)
		ret.push_back(arr[i]);
</code></pre>
<p>(und per strcpy wieder zurück) konvertiere, bleibt die Größe erhalten, nicht jedoch, wenn ich es per std::string ret(arr); oder std::string ret = arr; mache.</p>
<p>Was genau machen die String-Konstruktoren mit einem Char-Array? Schmeißen die einfach Daten weg? Kann ja fast nicht sein ... Oder ist das ne Dateneinheitssache, also die Größe eines String-Elements entspricht nicht der Größe eines Elements eines Char-Arrays?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/217797/einzelheiten-zur-umwandlung-von-char-array-nach-string</link><generator>RSS for Node</generator><lastBuildDate>Sat, 10 Oct 2026 06:56:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/217797.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 11 Jul 2008 12:12:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Einzelheiten zur Umwandlung von Char-Array nach String on Fri, 11 Jul 2008 12:12:16 GMT]]></title><description><![CDATA[<p>Hallo alle,</p>
<p>bin heute über folgendes Phänomen gestolpert: Ich wollte ein C-Char-Array in einen String konvertieren und anschließend wieder zurück. Dabei ist mir dann irgend wann mal aufgefallen, dass die Char-Array-Größe nach der Rückkonvertierung erheblich kleiner ist als zu Beginn.</p>
<p>Wenn ich es per</p>
<pre><code>std::string ret;
	for (int i = 0; i != Length+1; i++)
		ret.push_back(arr[i]);
</code></pre>
<p>(und per strcpy wieder zurück) konvertiere, bleibt die Größe erhalten, nicht jedoch, wenn ich es per std::string ret(arr); oder std::string ret = arr; mache.</p>
<p>Was genau machen die String-Konstruktoren mit einem Char-Array? Schmeißen die einfach Daten weg? Kann ja fast nicht sein ... Oder ist das ne Dateneinheitssache, also die Größe eines String-Elements entspricht nicht der Größe eines Elements eines Char-Arrays?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545657</guid><dc:creator><![CDATA[TheBrain]]></dc:creator><pubDate>Fri, 11 Jul 2008 12:12:16 GMT</pubDate></item><item><title><![CDATA[Reply to Einzelheiten zur Umwandlung von Char-Array nach String on Fri, 11 Jul 2008 12:19:00 GMT]]></title><description><![CDATA[<p>TheBrain schrieb:</p>
<blockquote>
<p>Hallo alle,</p>
<p>bin heute über folgendes Phänomen gestolpert: Ich wollte ein C-Char-Array in einen String konvertieren und anschließend wieder zurück. Dabei ist mir dann irgend wann mal aufgefallen, dass die Char-Array-Größe nach der Rückkonvertierung erheblich kleiner ist als zu Beginn.</p>
</blockquote>
<p>Wie hast du das gemacht? Code?</p>
<p>Wie prüfst du die &quot;Char-Array-Größe&quot; ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545664</guid><dc:creator><![CDATA[bladerunner10]]></dc:creator><pubDate>Fri, 11 Jul 2008 12:19:00 GMT</pubDate></item><item><title><![CDATA[Reply to Einzelheiten zur Umwandlung von Char-Array nach String on Fri, 11 Jul 2008 12:19:13 GMT]]></title><description><![CDATA[<p>Bitte liefer ein nachvollziehbares Beispiel. Folgendes funktioniert einwandfrei:</p>
<pre><code class="language-cpp">char array[] = &quot;Hallo Welt&quot;;
string s = array;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1545666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545666</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 11 Jul 2008 12:19:13 GMT</pubDate></item><item><title><![CDATA[Reply to Einzelheiten zur Umwandlung von Char-Array nach String on Fri, 11 Jul 2008 12:44:39 GMT]]></title><description><![CDATA[<p>und zurück gehts so:</p>
<pre><code class="language-cpp">string s = &quot;lol&quot;;
char *c;
strcpy(s.c_str(), c);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1545692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545692</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 11 Jul 2008 12:44:39 GMT</pubDate></item><item><title><![CDATA[Reply to Einzelheiten zur Umwandlung von Char-Array nach String on Fri, 11 Jul 2008 12:46:30 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>und zurück gehts so:</p>
<pre><code class="language-cpp">string s = &quot;lol&quot;;
char *c;
strcpy(s.c_str(), c);
</code></pre>
</blockquote>
<p>Naja, Hauptsache 'c' zeigt auch auf einen genügend großen Speicherbereich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545695</guid><dc:creator><![CDATA[bladerunner10]]></dc:creator><pubDate>Fri, 11 Jul 2008 12:46:30 GMT</pubDate></item><item><title><![CDATA[Reply to Einzelheiten zur Umwandlung von Char-Array nach String on Fri, 11 Jul 2008 12:49:15 GMT]]></title><description><![CDATA[<p>Und bei den C-Funktionen kommt das Ziel zuerst <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1545700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545700</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 11 Jul 2008 12:49:15 GMT</pubDate></item><item><title><![CDATA[Reply to Einzelheiten zur Umwandlung von Char-Array nach String on Fri, 11 Jul 2008 12:51:02 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Und bei den C-Funktionen kommt das Ziel zuerst <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>
</blockquote>
<p>Aua!<br />
Ich sag' ja, die sollten verboten werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545703</guid><dc:creator><![CDATA[bladerunner10]]></dc:creator><pubDate>Fri, 11 Jul 2008 12:51:02 GMT</pubDate></item><item><title><![CDATA[Reply to Einzelheiten zur Umwandlung von Char-Array nach String on Fri, 11 Jul 2008 13:44:42 GMT]]></title><description><![CDATA[<p>Das ist halt Intel- und nicht AT&amp;T-Syntax.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545752</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545752</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Fri, 11 Jul 2008 13:44:42 GMT</pubDate></item><item><title><![CDATA[Reply to Einzelheiten zur Umwandlung von Char-Array nach String on Fri, 11 Jul 2008 13:45:53 GMT]]></title><description><![CDATA[<p>Oder du machst das &quot;zurück&quot; so:</p>
<pre><code class="language-cpp">std::string MyString = &quot;MyString&quot;;
char const* pcMyString = MyString.c_str();
</code></pre>
<p>Vor allem, wenn du nur irgendwelche längen des zurückgegebenen C-Strings überprüfen willst <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>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545754</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 11 Jul 2008 13:45:53 GMT</pubDate></item><item><title><![CDATA[Reply to Einzelheiten zur Umwandlung von Char-Array nach String on Fri, 11 Jul 2008 13:53:08 GMT]]></title><description><![CDATA[<p>@ Dravere<br />
Für einen kleinen Test geht das zwar schon, aber man muss auch aufpassen. Wenn der <code>std::string</code> nur lokal existiert, dann ist der Zeiger auf <code>char</code> nämlich nicht mehr gültig...</p>
<pre><code class="language-cpp">int main() 
{
	char const* pcMyString;
	{
		std::string MyString = &quot;MyString&quot;; 
		pcMyString = MyString.c_str();
	}
	std::cout &lt;&lt; pcMyString &lt;&lt; std::endl; // Zeiger ungültig, undefiniertes Verhalten
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1545760</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545760</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 11 Jul 2008 13:53:08 GMT</pubDate></item><item><title><![CDATA[Reply to Einzelheiten zur Umwandlung von Char-Array nach String on Fri, 11 Jul 2008 14:06:11 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Für einen kleinen Test geht das zwar schon, ...</p>
</blockquote>
<p>Und genau darum geht es doch hier, oder?<br />
Aber gut, dass du es noch ergänzt hast, falls dies jemandem nicht bewusst war, so ist es nun, hoffentlich.<br />
Bei Nicht-Tests sollte man allerdings wenn möglich sowieso auf den C-String verzichten. Erst recht, wenn man zum Beispiel eine Kopie irgendwohin weitergeben möchte, dann gleich den std::string weitergeben!</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545767</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 11 Jul 2008 14:06:11 GMT</pubDate></item><item><title><![CDATA[Reply to Einzelheiten zur Umwandlung von Char-Array nach String on Fri, 11 Jul 2008 14:14:15 GMT]]></title><description><![CDATA[<p>Der Code, in dem das Problem auftritt, ist leider etwas komplexer und ich mülle euch hier nur ungerne mit seitenweise Code zu. Es handelt sich um keinen Test, ich verwende eine Bibliothek, die leider auf Char-Arrays arbeitet und schreibe mir gerade Wrapper-Klassen dafür, die Strings verwenden, aber intern dann mit Char-Arrays arbeiten ... <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>Im Grund tritt das Problem bei mir in folgendem Zusammenhang auf:</p>
<p>Ich verwende eine Funktion, die als Argument ein Char-Array verwendet und in dieses das Ergebnis hineinschreibt.</p>
<p>Die exakt benötigte Größe kann ich mir vorher von der Funktion zurückgeben lassen, indem ich sie mit leerem Argument anstelle des Char-Arrays aufrufe (damit weiß ich auch, wie viel Speicher ich reservieren muss).</p>
<p>Sagen wir mal, das Char-Array hatte vorher eine Größe von 300 Byte. Wenn ich nun dieses Char-Array wie oben beschrieben in einen String umwandle, so ist dieser nur noch sagen wir mal 35 Byte groß. Wenn ic hden String dann per strcpy wieder in ein Char-Array umwandle enthält dieses auch nur noch die 35 Byte.</p>
<p>Wenn ich die einzelnen Elemente des Char-Arrays &quot;per Hand&quot; in den String kopiere, funktioniert alles wunderbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545775</guid><dc:creator><![CDATA[TheBrain]]></dc:creator><pubDate>Fri, 11 Jul 2008 14:14:15 GMT</pubDate></item><item><title><![CDATA[Reply to Einzelheiten zur Umwandlung von Char-Array nach String on Fri, 11 Jul 2008 14:18:16 GMT]]></title><description><![CDATA[<p>Vielleicht ist das Element am Index 36 eine '0'?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545777</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Fri, 11 Jul 2008 14:18:16 GMT</pubDate></item><item><title><![CDATA[Reply to Einzelheiten zur Umwandlung von Char-Array nach String on Fri, 11 Jul 2008 14:18:44 GMT]]></title><description><![CDATA[<p>Und nun verrate uns doch mal, wie du die jeweiligen Größen feststellst (Wow, ein Wort mit 3x 'st'...)</p>
<p>Ein Char Array hat immer eine feste Größe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545778</guid><dc:creator><![CDATA[bladerunner10]]></dc:creator><pubDate>Fri, 11 Jul 2008 14:18:44 GMT</pubDate></item><item><title><![CDATA[Reply to Einzelheiten zur Umwandlung von Char-Array nach String on Fri, 11 Jul 2008 14:21:54 GMT]]></title><description><![CDATA[<p>David_pb schrieb:</p>
<blockquote>
<p>Vielleicht ist das Element am Index 36 eine '0'?</p>
</blockquote>
<p>Genau und deshalb kann man einen String auch mit Iteratoren bauen, bzw. mit Zeigern:</p>
<pre><code class="language-cpp">char* pArray; // Das Array
int iSize; // Die Grösse des Arrays

std::string MyString(pArray, pArray + iSize); // kopiert auch 0-Elemente.
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545781</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 11 Jul 2008 14:21:54 GMT</pubDate></item><item><title><![CDATA[Reply to Einzelheiten zur Umwandlung von Char-Array nach String on Fri, 11 Jul 2008 14:26:28 GMT]]></title><description><![CDATA[<p>Wenn du unbedingt die gleiche Grösse wie vorher haben willst, kannst du diese ja in einem Integer speichern und beim Neu-Erstellen des Char-Arrays berücksichtigen.</p>
<p>TheBrain schrieb:</p>
<blockquote>
<p>Wenn ic hden String dann per strcpy wieder in ein Char-Array umwandle enthält dieses auch nur noch die 35 Byte.</p>
</blockquote>
<p>Das ist eben keine Umwandlung. Du musst die Grösse des Char-Arrays schon vorher festlegen, damit du auch keine Speicherverletzungen hast. Wenn du dann ein Char-Array mit einer genug grossen Länge hast, kannst du per <code>strcpy()</code> die ersten x Zeichen füllen. Die restlichen (hinter dem '\0') bleiben eben unbeschrieben, aber wären immer noch für die Benutzung vorhanden.</p>
<p>David_pb schrieb:</p>
<blockquote>
<p>Vielleicht ist das Element am Index 36 eine '0'?</p>
</blockquote>
<p>Wenn schon, eine '\0' <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1545786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545786</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 11 Jul 2008 14:26:28 GMT</pubDate></item><item><title><![CDATA[Reply to Einzelheiten zur Umwandlung von Char-Array nach String on Fri, 11 Jul 2008 14:29:16 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>David_pb schrieb:</p>
<blockquote>
<p>Vielleicht ist das Element am Index 36 eine '0'?</p>
</blockquote>
<p>Wenn schon, eine '\0' <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>
</blockquote>
<p>Jaja! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":-P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545788</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Fri, 11 Jul 2008 14:29:16 GMT</pubDate></item><item><title><![CDATA[Reply to Einzelheiten zur Umwandlung von Char-Array nach String on Fri, 11 Jul 2008 14:29:43 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18986">@bladerunner10</a>: hab ich schon verraten <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><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10754">@David_pb</a> &amp;&amp; Dravere: Verdammt, ja, das kann gut sein. Finde ich ehrlich gesagt aber ganz schön tückisch ... das müsste doch dann ziemlich oft passieren.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>: Größe mitschleppen is nich, da es über mehrere Funktionsaufrufe hinweg geht (will nicht für jede Funktion nen extra Größenparameter).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545789</guid><dc:creator><![CDATA[TheBrain]]></dc:creator><pubDate>Fri, 11 Jul 2008 14:29:43 GMT</pubDate></item><item><title><![CDATA[Reply to Einzelheiten zur Umwandlung von Char-Array nach String on Fri, 11 Jul 2008 14:59:32 GMT]]></title><description><![CDATA[<p>TheBrain schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10754">@David_pb</a> &amp;&amp; Dravere: Verdammt, ja, das kann gut sein. Finde ich ehrlich gesagt aber ganz schön tückisch ... das müsste doch dann ziemlich oft passieren.</p>
</blockquote>
<p>Naja, strlen und co sind halt wirklich für C-Strings gedacht und die enden immer mit einem '\0'. Wenn man diese Funktionen dann nicht für C-Strings sondern für Byte-Arrays verwendet, dann verwendet man die Sache halt falsch und es treten Fehler auf.<br />
Für Byte-Arrays in C musst du irgendwie die Länge mitgeben. Und wenn möglich dann über memcpy oder ähnliches kopieren, in C auf C.</p>
<p>Um von C auf C++ zu kopieren, geht es am besten mit dem oben genannten Weg. Das geht bei allen Containern.</p>
<p>Ich sehe daher keinen Weg, wie du um das durchreichen der Array-Grösse drumherum kommst. Das ist halt ein Problem bei C-Arrays.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545806</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 11 Jul 2008 14:59:32 GMT</pubDate></item></channel></rss>