<?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[Frage zu char *]]></title><description><![CDATA[<p>Hallo! Man kann ja mit<br />
char * string;<br />
einen c-string definiern.<br />
und mit<br />
string[x];<br />
auf ein beliebiges element zugreifen.<br />
Wie lang darf denn so eine Zeichenkette werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/221996/frage-zu-char</link><generator>RSS for Node</generator><lastBuildDate>Mon, 05 Oct 2026 19:42:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/221996.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 06 Sep 2008 08:53:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu char * on Sat, 06 Sep 2008 08:53:01 GMT]]></title><description><![CDATA[<p>Hallo! Man kann ja mit<br />
char * string;<br />
einen c-string definiern.<br />
und mit<br />
string[x];<br />
auf ein beliebiges element zugreifen.<br />
Wie lang darf denn so eine Zeichenkette werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577421</guid><dc:creator><![CDATA[neoexpert]]></dc:creator><pubDate>Sat, 06 Sep 2008 08:53:01 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu char * on Sat, 06 Sep 2008 09:09:34 GMT]]></title><description><![CDATA[<p>Kommt drauf an, wieviel Speicher du dem Stack gibst. Eine dynamische Allokation kann dir aber weit aus mehr Speicher geben. (So viel, wie du halt hast).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577433</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 06 Sep 2008 09:09:34 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu char * on Sat, 06 Sep 2008 11:55:36 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">char * string;
string[x];
</code></pre>
<p>Wenn du das so hintereinander ausführst, hast du undefiniertes Verhalten, sher wahrscheinlich sogar einen Absturz.<br />
Grund:<br />
mit char* string definierst du nur einen zeiger, der auf nix zeigt.</p>
<p>du hast folgende möglichkeite;</p>
<pre><code class="language-cpp">// 1:
char string[100];  // speicher vom stack, gilt nur im aktuellen scope
                   // hier hast du platz für 99 Zeichem, da das letzte immer ein \0 sein muss.
                   // hier kann der string maximal die größe des stacks annehmen, ansosnten gibts nen linker fehler

// 2:
char string* = (char*) malloc(100); // dynamischer speicher, kann außerhalb des aktuellen scopes verwendet werden
                                    // muss per hand wieder freigegeben werden
                                    // größe kann bis zu 2GB sein, 
                                    // muss überprüft werden, ob speicher alloziert werden konnte

// 3:
std::string string;       // da wir im c++ forum sind, ist das die zu bevorzugende lösung, 
                          // da hier die speicherverwaltung automatisch passiert und die Klasse an sich auch sehr 
                          // komfortabel ist.
                          // für kompatibiltätszwecke mit c funktionen bekommst du mit string.c_str() einen char*
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1577530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577530</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Sat, 06 Sep 2008 11:55:36 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu char * on Sat, 06 Sep 2008 12:00:34 GMT]]></title><description><![CDATA[<p>char string[100];<br />
sind doch 100 zeichen + \0 oder?<br />
denn wenn man alle elmente aufzählt von 0 bis 100 sind es ja 101</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577535</guid><dc:creator><![CDATA[neoexpert]]></dc:creator><pubDate>Sat, 06 Sep 2008 12:00:34 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu char * on Sat, 06 Sep 2008 12:05:09 GMT]]></title><description><![CDATA[<p>vlad_tepesch schrieb:</p>
<blockquote>
<pre><code class="language-cpp">// 1:
char string[100];  // speicher vom stack, gilt nur im aktuellen scope
                   // hier hast du platz für 99 Zeichem, da das letzte immer ein \0 sein muss.
                   // hier kann der string maximal die größe des stacks annehmen, ansosnten gibts nen linker fehler
</code></pre>
</blockquote>
<p>Nein, du hast Platz für 100 Zeichen. Niemand hindert einem daran, das NULL-Zeichen am Ende des Strings nicht zu speichern!</p>
<p>vlad_tepesch schrieb:</p>
<blockquote>
<pre><code class="language-cpp">// 2:
char string* = (char*) malloc(100); // dynamischer speicher, kann außerhalb des aktuellen scopes verwendet werden
                                    // muss per hand wieder freigegeben werden
                                    // größe kann bis zu 2GB sein, 
                                    // muss überprüft werden, ob speicher alloziert werden konnte
</code></pre>
</blockquote>
<p>Heiliger Informatiker. Wir sind hier im C++ Bereich, verwende also bitte <code>new</code> !</p>
<pre><code class="language-cpp">char string* = new char[100];

// ...

delete[] string;
</code></pre>
<p>Zudem kann auch mehr als 2GB angefordert werden. Das kommt ganz darauf an, wieviel Arbeitspeicher frei ist und wieviel das Betriebsystem einem gibt.</p>
<p>vlad_tepesch schrieb:</p>
<blockquote>
<pre><code class="language-cpp">// 3:
std::string string;       // da wir im c++ forum sind, ist das die zu bevorzugende lösung, 
                          // da hier die speicherverwaltung automatisch passiert und die Klasse an sich auch sehr 
                          // komfortabel ist.
                          // für kompatibiltätszwecke mit c funktionen bekommst du mit string.c_str() einen char*
</code></pre>
</blockquote>
<p>Tut mir leid, aber auch hier hast du einen Fehler. Bei der Methode <code>c_str</code> bekommt man einen <code>char const*</code> .<br />
Referenz zu <code>std::string</code> , bzw. <code>std::basic_string</code> :<br />
<a href="http://www.cplusplus.com/reference/string/" rel="nofollow">http://www.cplusplus.com/reference/string/</a></p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10145">@neoexpert</a>,<br />
Man sollte übrigens keine literale über <code>char*</code> zugreifen. Also immer so etwas machen:<br />
<code>char const* string = &quot;Test!&quot;;</code></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577540</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 06 Sep 2008 12:05:09 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu char * on Sat, 06 Sep 2008 12:07:43 GMT]]></title><description><![CDATA[<p>neoexpert schrieb:</p>
<blockquote>
<p>char string[100];<br />
sind doch 100 zeichen + \0 oder?<br />
denn wenn man alle elmente aufzählt von 0 bis 100 sind es ja 101</p>
</blockquote>
<p>Nein. Die Nullterminierung ist in den 100 Zeichen eingeschlossen. Faktisch hast du also nur für 99 Zeichen Platz.</p>
<p>Bei einem Array mit der Dimension <code>n</code> sind gültige Indizes in <code>[0, n-1]</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577541</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 06 Sep 2008 12:07:43 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu char * on Sat, 06 Sep 2008 12:11:24 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>neoexpert schrieb:</p>
<blockquote>
<p>char string[100];<br />
sind doch 100 zeichen + \0 oder?<br />
denn wenn man alle elmente aufzählt von 0 bis 100 sind es ja 101</p>
</blockquote>
<p>Nein. Die Nullterminierung ist in den 100 Zeichen eingeschlossen. Faktisch hast du also nur für 99 Zeichen Platz.</p>
</blockquote>
<p>Ich kann mich nur nochmals wiederholen, nein!</p>
<pre><code class="language-cpp">char const* test = &quot;Test!&quot;; // 5 Zeichen + '\0'

char array[5];
std::copy(test, test + 5, array);
</code></pre>
<p>Das ist absolut gültig! Man muss die Nullterminierung nicht abspeichern.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577542</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 06 Sep 2008 12:11:24 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu char * on Sat, 06 Sep 2008 12:18:12 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Das ist absolut gültig! Man muss die Nullterminierung nicht abspeichern.</p>
</blockquote>
<p>Nur kriegt man dann Probleme, wenn man mit den C-Funktionen <code>strcpy()</code> , <code>strlen()</code> und Co. hantiert. Aber nicht nur dann.</p>
<p>Probier mal Folgendes:</p>
<pre><code class="language-cpp">char Str[5] = {'H', 'a', 'l', 'l', 'o'};
std::cout &lt;&lt; Str &lt;&lt; std::endl;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1577547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577547</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 06 Sep 2008 12:18:12 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu char * on Sat, 06 Sep 2008 12:40:26 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Dravere schrieb:</p>
<blockquote>
<p>Das ist absolut gültig! Man muss die Nullterminierung nicht abspeichern.</p>
</blockquote>
<p>Nur kriegt man dann Probleme, wenn man mit den C-Funktionen <code>strcpy()</code> , <code>strlen()</code> und Co. hantiert. Aber nicht nur dann.</p>
<p>Probier mal Folgendes:</p>
<pre><code class="language-cpp">char Str[5] = {'H', 'a', 'l', 'l', 'o'};
std::cout &lt;&lt; Str &lt;&lt; std::endl;
</code></pre>
</blockquote>
<p>Wer sagt, dass du das Teil so anwenden möchtest? Vielleicht nimmt jemand einfach auch die Grösse als Zahl mit. Dann gibt es nämlich auch <code>strncpy</code> und <code>strlen</code> ist unnötig. Desweiteren sind die zwei Funktionen auch noch C. Und wer sagt, das man nur Strings darin speichern möchte?</p>
<p>Es geht hier nämlich um was grundsätzliches, man sollte nicht den Eindruck vermitteln, dass man bei einem Array immer nur Platz für n-1 hat. Was ihr eigentlich sagen wollt, ist das folgende:</p>
<pre><code class="language-cpp">char string[6] = &quot;Test!&quot;; // hier muss man 6 verwenden, weil das '\0' mit gespeichert wird.
</code></pre>
<p>Aber das heisst nicht, dass man ein array immer so verwenden muss.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577556</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 06 Sep 2008 12:40:26 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu char * on Sat, 06 Sep 2008 12:42:17 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Man muss die Nullterminierung nicht abspeichern.</p>
</blockquote>
<p>Wenn man die Größenangaben selbst macht, dann muss man daran denken.</p>
<p>Natürlich kommts drauf an, ob man nur ein char-Array will oder einen C-String. Beim ersteren braucht man natürlich keine Nullterminierung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577557</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 06 Sep 2008 12:42:17 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu char * on Sat, 06 Sep 2008 12:50:10 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>Natürlich kommts drauf an, ob man nur ein char-Array will oder einen C-String. Beim ersteren braucht man natürlich keine Nullterminierung.</p>
</blockquote>
<p>Bei ersterem weist man aber auch selten String-Literale zu...</p>
<p>Wenn man in C++ noch ernsthaft mit <code>char</code> -Arrays arbeiten will und diese auch zur Textspeicherung benutzt, wird man wahrscheinlich auch mit den C-Funktionen darauf arbeiten. Und es ist dann immer noch komfortabler, ein Byte mehr auszugeben, um einen gültigen C-String zu haben.</p>
<p>Aber klar, für char-Arrays im Sinne der Speicherung einzelner Zeichen braucht es natürlich kein '\0'.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577565</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 06 Sep 2008 12:50:10 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu char * on Sat, 06 Sep 2008 13:26:06 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>neoexpert schrieb:</p>
<blockquote>
<p>char string[100];<br />
sind doch 100 zeichen + \0 oder?<br />
denn wenn man alle elmente aufzählt von 0 bis 100 sind es ja 101</p>
</blockquote>
<p>Nein. Die Nullterminierung ist in den 100 Zeichen eingeschlossen. Faktisch hast du also nur für 99 Zeichen Platz.</p>
<p>Bei einem Array mit der Dimension <code>n</code> sind gültige Indizes in <code>[0, n-1]</code> .</p>
</blockquote>
<pre><code class="language-cpp">char string[100];
string[0]='A';      //das erste Element
string[100]='B';    //das letzte Element oder?
</code></pre>
<p>also müsste doch 101 sein oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577597</guid><dc:creator><![CDATA[neoexpert]]></dc:creator><pubDate>Sat, 06 Sep 2008 13:26:06 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu char * on Sat, 06 Sep 2008 13:33:38 GMT]]></title><description><![CDATA[<p>string[100] ist ungültig.<br />
Du hast nur 100 Elemente</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577604</guid><dc:creator><![CDATA[JustAnotherNoob]]></dc:creator><pubDate>Sat, 06 Sep 2008 13:33:38 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu char * on Sat, 06 Sep 2008 13:35:04 GMT]]></title><description><![CDATA[<p>aja stimmt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577607</guid><dc:creator><![CDATA[neoexpert]]></dc:creator><pubDate>Sat, 06 Sep 2008 13:35:04 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu char * on Sat, 06 Sep 2008 13:43:46 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Wenn man in C++ noch ernsthaft mit <code>char</code> -Arrays arbeiten will und diese auch zur Textspeicherung benutzt, wird man wahrscheinlich auch mit den C-Funktionen darauf arbeiten. Und es ist dann immer noch komfortabler, ein Byte mehr auszugeben, um einen gültigen C-String zu haben.</p>
</blockquote>
<p>Also ich persönlich nicht. Ich verwende immer die Standardbibliothek C++ Algorithmen und führe selber auch meistens die Grösse mit, wenn ich ein C-Array verwende. Um mit Stringliteralen zu arbeiten, verwende ich allerdings meistens <code>char const*</code> . Und auch dort verwende ich oft die Algorithmen. Man bleibt irgendwie einheitlicher, hat mehr Möglichkeiten und wenn man einmal die Grösse braucht, hat man sie in O(1) und nicht in O(N).<br />
Aber naja, es passiert bei mir sowieso extrem selten, dass ich C-Strings oder C-Arrays verwende. Meistens nehme ich <code>std::string</code> für C-Strings oder <code>std::vector</code> für C-Arrays, auch wenn die Grössen konstant bleiben.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577617</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 06 Sep 2008 13:43:46 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu char * on Sat, 06 Sep 2008 14:22:07 GMT]]></title><description><![CDATA[<p>Geht mir eigentlich auch so, ich tendiere viel eher zur C++-Standardbibliothek. Ich sagte ja</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Wenn man in C++ noch ernsthaft mit char-Arrays arbeiten will [...]</p>
</blockquote>
<p>Aber wenn man sehr schnell mit <code>char</code> -Arrays arbeiten muss, kommt man natürlich nicht drum herum, die Grösse separat zu speichern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1577641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1577641</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 06 Sep 2008 14:22:07 GMT</pubDate></item></channel></rss>