<?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[Char* x = &amp;quot;Test&amp;quot; ist ein Array?]]></title><description><![CDATA[<p>Hallo Community<br />
Bisher habe ich alles in meinem Programmierbuch verstanden, nur etwas bereitet mir seit einer halben Ewigkeit Kopfzerbrechen. Nämlich dieser Befehl:</p>
<pre><code class="language-cpp">char* x = &quot;Test&quot;;
</code></pre>
<p>Wieso wird dann automatisch ein nullterminiertes Zeichen-Array erstellt? Für mich bedeutet der Befehl char* x, dass ein Zeiger auf eine char-Variable erstellt wird. Und bei diesem Befehl wird ja eine Wortkette erstellt(obwohl ein char nur ein Zeichen speichern kann). Für mich wäre die einzig richtige Definition:</p>
<pre><code class="language-cpp">char* x[] = &quot;Test&quot;;
</code></pre>
<p>Bitte helft mir, bin echt am verzweifeln und weiss nicht, wo bei meinen Überlegungen der Wurm drinsteckt.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/186835/char-x-quot-test-quot-ist-ein-array</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 17:14:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/186835.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 12 Jul 2007 20:35:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Char* x = &amp;quot;Test&amp;quot; ist ein Array? on Thu, 12 Jul 2007 20:35:47 GMT]]></title><description><![CDATA[<p>Hallo Community<br />
Bisher habe ich alles in meinem Programmierbuch verstanden, nur etwas bereitet mir seit einer halben Ewigkeit Kopfzerbrechen. Nämlich dieser Befehl:</p>
<pre><code class="language-cpp">char* x = &quot;Test&quot;;
</code></pre>
<p>Wieso wird dann automatisch ein nullterminiertes Zeichen-Array erstellt? Für mich bedeutet der Befehl char* x, dass ein Zeiger auf eine char-Variable erstellt wird. Und bei diesem Befehl wird ja eine Wortkette erstellt(obwohl ein char nur ein Zeichen speichern kann). Für mich wäre die einzig richtige Definition:</p>
<pre><code class="language-cpp">char* x[] = &quot;Test&quot;;
</code></pre>
<p>Bitte helft mir, bin echt am verzweifeln und weiss nicht, wo bei meinen Überlegungen der Wurm drinsteckt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1324165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1324165</guid><dc:creator><![CDATA[Gamer4]]></dc:creator><pubDate>Thu, 12 Jul 2007 20:35:47 GMT</pubDate></item><item><title><![CDATA[Reply to Char* x = &amp;quot;Test&amp;quot; ist ein Array? on Thu, 12 Jul 2007 20:41:29 GMT]]></title><description><![CDATA[<p>naja, es wird ja auch kein array erstellt.<br />
du legst einen pointer an und der wird mit der adresse eines nullterminierten strings initialisiert. diesen string packen compiler/linker in einen statischen (meistens read-only) bereich, so dass man über den pointer darauf zugreifen kann...<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/1324170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1324170</guid><dc:creator><![CDATA[pale dog]]></dc:creator><pubDate>Thu, 12 Jul 2007 20:41:29 GMT</pubDate></item><item><title><![CDATA[Reply to Char* x = &amp;quot;Test&amp;quot; ist ein Array? on Thu, 12 Jul 2007 21:03:31 GMT]]></title><description><![CDATA[<blockquote>
<p>Wieso wird dann automatisch ein nullterminiertes Zeichen-Array erstellt? Für mich bedeutet der Befehl char* x, dass ein Zeiger auf eine char-Variable erstellt wird. Und bei diesem Befehl wird ja eine Wortkette erstellt(obwohl ein char nur ein Zeichen speichern kann).</p>
</blockquote>
<p>genau, ein char* ist ein Zeiger auf ein einzelnes zeichen. In diesem Fall ist es der zeiger auf das erste zeichen der zeichenkette, also 'T'. Alle funktionen die nun mit diesem zeiger arbeiten, geben nun das 'T' aus und gehen dann eine Speicherstelle weiter, und finden das 'e', welches sie wiederum ausgeben. Das passiert nun solange, bis das Zeichen '\0' gefunden wird, das stringende zeichen. Deswegen ist es wichtig, dass diese Terminierung nicht entfernt wird, denn sonst gibt die Funktion die inhalte des Speichers aus, bis es zufälligerweise ein '\0' findet, oder das Betriebssystem das Programm stoppt.</p>
<p>Wie funktioniert das?</p>
<p>&quot;Test&quot; ist wie gesagt ein nullterminierter string, genauer gesagt ein char array, richtig wär also nicht</p>
<pre><code class="language-cpp">char* x[] = &quot;Test&quot;;
</code></pre>
<p>sondern</p>
<pre><code class="language-cpp">char x[] = &quot;Test&quot;;
</code></pre>
<p>jedes array ist aber auch implizit in einen zeiger umwandelbar(ein array ist eigentlich nichts anderes als ein zeiger der dann ein paar stellen weitergeschoben wird).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1324179</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1324179</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Thu, 12 Jul 2007 21:03:31 GMT</pubDate></item><item><title><![CDATA[Reply to Char* x = &amp;quot;Test&amp;quot; ist ein Array? on Thu, 12 Jul 2007 21:06:06 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>ein array ist eigentlich nichts anderes als ein zeiger der dann ein paar stellen weitergeschoben wird</p>
</blockquote>
<p>o_O ich schieb es mal auf Tageszeit ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1324180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1324180</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 12 Jul 2007 21:06:06 GMT</pubDate></item><item><title><![CDATA[Reply to Char* x = &amp;quot;Test&amp;quot; ist ein Array? on Fri, 13 Jul 2007 04:31:30 GMT]]></title><description><![CDATA[<p>hmm ohman..</p>
<pre><code class="language-cpp">char* x = &quot;Test&quot;;
</code></pre>
<p>das das geht wusste ich gar nich..</p>
<p>dachte immer man muss</p>
<pre><code class="language-cpp">char x[]
</code></pre>
<p>bzw.</p>
<pre><code class="language-cpp">char x[n]
</code></pre>
<p>schreiben, damit speicehr für &quot;Test&quot; reserviert wird...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1324250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1324250</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Fri, 13 Jul 2007 04:31:30 GMT</pubDate></item><item><title><![CDATA[Reply to Char* x = &amp;quot;Test&amp;quot; ist ein Array? on Fri, 13 Jul 2007 08:21:18 GMT]]></title><description><![CDATA[<p>Boris, dir scheinen wirklich noch einige Grundlagen zu fehlen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1324395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1324395</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Fri, 13 Jul 2007 08:21:18 GMT</pubDate></item><item><title><![CDATA[Reply to Char* x = &amp;quot;Test&amp;quot; ist ein Array? on Fri, 13 Jul 2007 08:24:43 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>hmm ohman..</p>
<pre><code class="language-cpp">char* x = &quot;Test&quot;;
</code></pre>
<p>das das geht wusste ich gar nich..</p>
</blockquote>
<p>Da siehst du mal, man kann immer noch dazu lernen <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="😉"
    /> Damit hast du in deinem Programm nur einen Zeiger auf einen C-String - und dieser zeigt auf das String-Literal &quot;Test&quot;, das irgendwo im Speicher zwischengelagert ist (idR schreibgeschützt und mehrfach verwendet). Bei der Array-Variante legst du unmittelbar vor Ort genug Speicher an, wo dasnn eine eigenständige Kopie dieses Literals untergebracht wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1324401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1324401</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 13 Jul 2007 08:24:43 GMT</pubDate></item><item><title><![CDATA[Reply to Char* x = &amp;quot;Test&amp;quot; ist ein Array? on Fri, 13 Jul 2007 09:06:20 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>das das geht wusste ich gar nich..</p>
</blockquote>
<p>Mach dir nichts draus. In der letzten Firmen galt ich als einer der C++ Experten. Und überspitzt kann ich sagen: Heute weiß ich das ich nichts weiß. Ich lese ständig Fachbücher und schaue regelmäßig zu bestimmten Themen im Internet, und ich stelle immer wieder fest das es dort immer noch neues gibt (mal nur Kleinigkeiten die man erst beim hartnäckigen lesen findet, mal zwar kleine, aber echte Wissenslücken in Einzelthemen).</p>
<p>Manchmal würde ich mir wünschen das ich Scheuklappen wie ein paar andere hätte, dann hätte ich es häufig im Leben leichter gehabt. Anderseits muss ich sagen bin ich so wenigstens immer einigermaßen aktuell im Wissen und werde nicht von der Entwicklung überrannt wenn ich mal wechseln sollte. Harken dabei ist: Im Beruf muss ich mit Compilern klarkommen die teilweise extrem weit von jeglichen C++ Standard sind (Bei einem kann man sogar sagen: STL was ist das?), privat setze ich aber eben auf den Standard und die STL. Und ein weiteres Problem das ich z.B. bei einer Jobsuche habe ist, das nahezu alle eingesetzten Bibliotheken Speziallösungen waren, oder Totgeburten (Beispielsweise VCL zu zeiten vom Borland Builder 5 oder die Bibliotheken von Power++).</p>
<p>Kurzgesagt: Du wirst wohl niemals einen Stand erreichen an dem du sagen kannst das du C++ völlig beherrschst. Irgendeine neue Erkenntnis wird es immer geben.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1324450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1324450</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 13 Jul 2007 09:06:20 GMT</pubDate></item><item><title><![CDATA[Reply to Char* x = &amp;quot;Test&amp;quot; ist ein Array? on Fri, 13 Jul 2007 18:12:58 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>genau, ein char* ist ein Zeiger auf ein einzelnes zeichen. In diesem Fall ist es der zeiger auf das erste zeichen der zeichenkette, also 'T'. Alle funktionen die nun mit diesem zeiger arbeiten, geben nun das 'T' aus und gehen dann eine Speicherstelle weiter, und finden das 'e', welches sie wiederum ausgeben. Das passiert nun solange, bis das Zeichen '\0' gefunden wird, das stringende zeichen. Deswegen ist es wichtig, dass diese Terminierung nicht entfernt wird, denn sonst gibt die Funktion die inhalte des Speichers aus, bis es zufälligerweise ein '\0' findet, oder das Betriebssystem das Programm stoppt.</p>
</blockquote>
<p>Wieso geht diese Funktion automatisch eine Speicherstelle weiter?</p>
<p>@all:<br />
Danke für die Hilfe</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9348">@Th</a>:<br />
[Ironie an]Danke für deinen tollen Beitrag[Ironie aus]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1324870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1324870</guid><dc:creator><![CDATA[Gamer4]]></dc:creator><pubDate>Fri, 13 Jul 2007 18:12:58 GMT</pubDate></item><item><title><![CDATA[Reply to Char* x = &amp;quot;Test&amp;quot; ist ein Array? on Fri, 13 Jul 2007 18:33:37 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>Kurzgesagt: Du wirst wohl niemals einen Stand erreichen an dem du sagen kannst das du C++ völlig beherrschst. Irgendeine neue Erkenntnis wird es immer geben.</p>
</blockquote>
<p>*Vollkommen Zustimm*<br />
Siehe meine Signatur <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/1324879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1324879</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 13 Jul 2007 18:33:37 GMT</pubDate></item><item><title><![CDATA[Reply to Char* x = &amp;quot;Test&amp;quot; ist ein Array? on Fri, 13 Jul 2007 20:40:07 GMT]]></title><description><![CDATA[<p>Gamer4 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">char* x = &quot;Test&quot;;
</code></pre>
</blockquote>
<p>Das wird liebevoll als die Conversion Of Death bezeichnet. &quot;Test&quot; ist vom Typ const char[]. Durch die automatische Array-To-Pointer-Conversion (ein Array konviertiert bis auf wenige Ausnahmen implizit in einen Zeiger auf sein erstes Element) wird daraus ein const char*. Und das ist auch gut so, denn der Zeiger zeigt in einen Speicherbereich, der sehr wahrscheinlich nur lesbar ist und bei Schreibzugriffen von komischem Verhalten bis zu Speicherschutzverletzungen führen kann (undefiniertes Verhalten).</p>
<p>Warum wird dann aus einen const char* ein char*? Ein const wird dort ja schließlich sonst nie entfernt und es kommt zu einem Kompilierfehler. Zur C-Kompatibilität ist es (leider..) im Standard vorgesehen, dass ein const char* implizit in einen char* konvertieren kann - was dort auch passiert. Jeder halbwegs aktuelle Compiler warnt übrigens davor. Wenn du also in diesen Zeiger schreibst, knallt es vermutlich oder die Nasenkobolde fliegen. Bei einem char x[] = &quot;Test&quot; passiert dir das nicht, denn hier wird tatsächlich ein Array (der Größe 5) angelegt und mit dem Inhalt des Literals &quot;Test&quot; initialisiert (es wird eine schreibbare Kopie angelegt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1324967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1324967</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Fri, 13 Jul 2007 20:40:07 GMT</pubDate></item><item><title><![CDATA[Reply to Char* x = &amp;quot;Test&amp;quot; ist ein Array? on Fri, 20 Jul 2007 21:22:00 GMT]]></title><description><![CDATA[<p>Danke für die Antworten. Ich glaube, ich habe es jetzt verstanden... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1329507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1329507</guid><dc:creator><![CDATA[Gamer4]]></dc:creator><pubDate>Fri, 20 Jul 2007 21:22:00 GMT</pubDate></item></channel></rss>