<?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 zum Füllen eines Char-Arrays - habe einen Fehler]]></title><description><![CDATA[<p>Hallo liebe Community,</p>
<p>Momentan beschäftige ich mich mit c++, bin also noch Anfänger.<br />
ich möchte eine Textdatei auslesen, die Werte trennen und in einem Struct speichern. Das Auslesen klappt wunderbar und das Speichern der einzelnen Zeilen in einem String geht auch. Das Zerlegen des Strings klappt aber irgendwie nicht, sobald das Char-Array mehr als 26 Zeichen bekommt -&gt; ein Heap wurde beschädigt.<br />
Jedoch sehe ich den fehler nicht wirklich. Vielleicht könnt ihr mir einen Tipp geben?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
using namespace std;

void main(){

	int i = 0;
	vector&lt;string&gt; zeichen;
	zeichen.resize(6);
	zeichen[0] = &quot;sjsjrtzjhngf&quot;;
	zeichen[1] = &quot;dfgjsfgj&quot;;
	zeichen[2] = &quot;gghsfjdjghkgdhkdghkdkhfgjfeudfjdfj&quot;; // wenn mehr als 26 zeichen, wird ein fehler ausgeworfen - aber warum?
	zeichen[3] = &quot;gzgz&quot;;

	char * stringchar = NULL;

	while(i &lt; 4){
	int laenge = zeichen[i].size()+1;
	stringchar = new char(laenge);
	strcpy(stringchar, zeichen[i].c_str());
	cout&lt;&lt;&quot;stringchar :&quot;&lt;&lt;stringchar&lt;&lt;endl;
	i++;
	}

system(&quot;pause&quot;);	
}
</code></pre>
<p>Ich weiß, dass sich der Sinn dieses Codes nicht ergibt. Mir geht es jedoch nur um den Fehler, der Auftritt, wenn im Char-Array mehr als 26 Zeichen reinkommen sollen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/304639/frage-zum-füllen-eines-char-arrays-habe-einen-fehler</link><generator>RSS for Node</generator><lastBuildDate>Sun, 09 Aug 2026 11:05:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/304639.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 11 Jun 2012 10:09:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zum Füllen eines Char-Arrays - habe einen Fehler on Mon, 11 Jun 2012 10:09:10 GMT]]></title><description><![CDATA[<p>Hallo liebe Community,</p>
<p>Momentan beschäftige ich mich mit c++, bin also noch Anfänger.<br />
ich möchte eine Textdatei auslesen, die Werte trennen und in einem Struct speichern. Das Auslesen klappt wunderbar und das Speichern der einzelnen Zeilen in einem String geht auch. Das Zerlegen des Strings klappt aber irgendwie nicht, sobald das Char-Array mehr als 26 Zeichen bekommt -&gt; ein Heap wurde beschädigt.<br />
Jedoch sehe ich den fehler nicht wirklich. Vielleicht könnt ihr mir einen Tipp geben?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
using namespace std;

void main(){

	int i = 0;
	vector&lt;string&gt; zeichen;
	zeichen.resize(6);
	zeichen[0] = &quot;sjsjrtzjhngf&quot;;
	zeichen[1] = &quot;dfgjsfgj&quot;;
	zeichen[2] = &quot;gghsfjdjghkgdhkdghkdkhfgjfeudfjdfj&quot;; // wenn mehr als 26 zeichen, wird ein fehler ausgeworfen - aber warum?
	zeichen[3] = &quot;gzgz&quot;;

	char * stringchar = NULL;

	while(i &lt; 4){
	int laenge = zeichen[i].size()+1;
	stringchar = new char(laenge);
	strcpy(stringchar, zeichen[i].c_str());
	cout&lt;&lt;&quot;stringchar :&quot;&lt;&lt;stringchar&lt;&lt;endl;
	i++;
	}

system(&quot;pause&quot;);	
}
</code></pre>
<p>Ich weiß, dass sich der Sinn dieses Codes nicht ergibt. Mir geht es jedoch nur um den Fehler, der Auftritt, wenn im Char-Array mehr als 26 Zeichen reinkommen sollen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2221947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221947</guid><dc:creator><![CDATA[stbase]]></dc:creator><pubDate>Mon, 11 Jun 2012 10:09:10 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Füllen eines Char-Arrays - habe einen Fehler on Mon, 11 Jun 2012 10:24:25 GMT]]></title><description><![CDATA[<p>Dein eigentlicher Fehler liegt hier:</p>
<pre><code class="language-cpp">stringchar = new char(laenge);
</code></pre>
<p>Du willst</p>
<pre><code class="language-cpp">stringchar = new char[laenge];
</code></pre>
<p>Aber warum kopierst du von einem std::string ein Heapallokiertes Array? Insbesondere, da du ja std::vector und std::string kennst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2221951</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221951</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 11 Jun 2012 10:24:25 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Füllen eines Char-Arrays - habe einen Fehler on Mon, 11 Jun 2012 10:42:19 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Vielen lieben Dank - das war es gewesen.</p>
<p>Die Textzeilen der Textdatei lese ich in den Vector ein - da ich nicht weiß, wieviele Zeilen die Textdatei enthält.<br />
Das Zerlegen der eingelesenen Textzeilen mache ich mit strtok. Aber strtok benötigt ein Char-Array, deswegen kopiere ich es.<br />
Ich denke, das ganze geht auch einfacher, aber ich lerne ja noch (quasi learning by doing) - und ich habe hier im Forum schon einiges durch lesen gelernt.</p>
<p>Gruß<br />
STBase</p>
<p>ps: gern kann ich heute Abend auch den ganzen Quellcode posten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2221961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221961</guid><dc:creator><![CDATA[stbase]]></dc:creator><pubDate>Mon, 11 Jun 2012 10:42:19 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Füllen eines Char-Arrays - habe einen Fehler on Mon, 11 Jun 2012 10:43:59 GMT]]></title><description><![CDATA[<p>Vergiß das delete[] nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2221963</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221963</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Mon, 11 Jun 2012 10:43:59 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Füllen eines Char-Arrays - habe einen Fehler on Mon, 11 Jun 2012 10:50:52 GMT]]></title><description><![CDATA[<p>Caligulaminus schrieb:</p>
<blockquote>
<p>Vergiß das delete[] nicht...</p>
</blockquote>
<p>Hallo,<br />
guter Hinweis. Danke.<br />
Gruß<br />
STBase</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2221966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221966</guid><dc:creator><![CDATA[stbase]]></dc:creator><pubDate>Mon, 11 Jun 2012 10:50:52 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Füllen eines Char-Arrays - habe einen Fehler on Mon, 11 Jun 2012 10:54:03 GMT]]></title><description><![CDATA[<p>stbase schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>Vielen lieben Dank - das war es gewesen.</p>
<p>Die Textzeilen der Textdatei lese ich in den Vector ein - da ich nicht weiß, wieviele Zeilen die Textdatei enthält.<br />
Das Zerlegen der eingelesenen Textzeilen mache ich mit strtok. Aber strtok benötigt ein Char-Array, deswegen kopiere ich es.<br />
Ich denke, das ganze geht auch einfacher, aber ich lerne ja noch (quasi learning by doing) - und ich habe hier im Forum schon einiges durch lesen gelernt.</p>
<p>Gruß<br />
STBase</p>
<p>ps: gern kann ich heute Abend auch den ganzen Quellcode posten.</p>
</blockquote>
<p>Leitfaden:<br />
- Benutzt du new für Arrays ist das fast immer falsch.<br />
- Benutzt du Funktionen aus cstring/string.h ist das fast immer falsch (hier hast du vergessen cstring einzubinden, obwohl du strcpy benutzt!)<br />
- Benutzt du char-Arrays für Zeichenketten ist das fast immer falsch<br />
- Das &quot;fast immer&quot; in diesen Aussagen ist als &quot;immer&quot; zu verstehen, außer du konstruierst mit Gewalt ein Gegenbeispiel, bei dem es vielleicht einen winzigkleinen Vorteil gibt.</p>
<p>P.S.: <strong>void</strong> main ist <em>immer</em> falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2221967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221967</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 11 Jun 2012 10:54:03 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Füllen eines Char-Arrays - habe einen Fehler on Mon, 11 Jun 2012 10:59:08 GMT]]></title><description><![CDATA[<p>Tausche gerne ein &quot;ungeschickt&quot; gegen ein &quot;falsch&quot; <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/2221970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221970</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Mon, 11 Jun 2012 10:59:08 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Füllen eines Char-Arrays - habe einen Fehler on Mon, 11 Jun 2012 11:03:44 GMT]]></title><description><![CDATA[<p>Swordfish schrieb:</p>
<blockquote>
<p>Tausche gerne ein &quot;ungeschickt&quot; gegen ein &quot;falsch&quot; <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>
</blockquote>
<p>Technisch gesehen ja, aber so merkt er es sich hoffentlich besser <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="🙂"
    /> . Und void main ist <em>falsch</em>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2221973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2221973</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 11 Jun 2012 11:03:44 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Füllen eines Char-Arrays - habe einen Fehler on Mon, 11 Jun 2012 13:52:50 GMT]]></title><description><![CDATA[<p>stbase schrieb:</p>
<blockquote>
<p>Aber strtok benötigt ein Char-Array, deswegen kopiere ich es.</p>
</blockquote>
<p>Nein, strtok benötigt einen <em>Pointer</em> auf ein char-Array, und da std::vector garantiert die Elemente intern in so einem Array verwaltet, darfst du strok gerne den Pointer auf das erste Element des vector übergeben: <code>vec.data()</code> (in C++11) bzw. <code>&amp;vec[0]</code> in C++03. Das Einzige worauf du aufpassen musst ist, dass du auch den Nulldelimiter im vector hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2222040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2222040</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 11 Jun 2012 13:52:50 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Füllen eines Char-Arrays - habe einen Fehler on Mon, 11 Jun 2012 16:52:16 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>vielen Dank für die Antworten. Dadurch kommt man auf ganz neue Ideen.<br />
Ich werde mir mal die Vectoren genau ansehen und das ganze ohne den Umweg über das Char-Array zu lösen.</p>
<p>Gruß<br />
STBase</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2222134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2222134</guid><dc:creator><![CDATA[stbase]]></dc:creator><pubDate>Mon, 11 Jun 2012 16:52:16 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Füllen eines Char-Arrays - habe einen Fehler on Mon, 11 Jun 2012 17:01:43 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>stbase schrieb:</p>
<blockquote>
<p>Aber strtok benötigt ein Char-Array, deswegen kopiere ich es.</p>
</blockquote>
<p>Nein, strtok benötigt einen <em>Pointer</em> auf ein char-Array, und da std::vector garantiert die Elemente intern in so einem Array verwaltet, darfst du strok gerne den Pointer auf das erste Element des vector übergeben: <code>vec.data()</code> (in C++11) bzw. <code>&amp;vec[0]</code> in C++03. Das Einzige worauf du aufpassen musst ist, dass du auch den Nulldelimiter im vector hast.</p>
</blockquote>
<p>strtok verändert aber den Inhalt, data zeigt jedoch auf einen const-Bereich.</p>
<p>Aber wieso strtok? std::string und die algorithms bieten auch alles was strtok kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2222136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2222136</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 11 Jun 2012 17:01:43 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Füllen eines Char-Arrays - habe einen Fehler on Mon, 11 Jun 2012 17:26:12 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe es jetzt doch etwas anders gelöst und es sieht irgendwie besser aus <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>
<pre><code class="language-cpp">// string zerlegen
		string Terminzeile = &quot;Titel;Betreff;Ort&quot;;
		istringstream tzeile(Terminzeile);
		string ausgabe;
		while(getline(tzeile, ausgabe, ';'))
			{
		    cout&lt;&lt;ausgabe&lt;&lt;endl;
			}
</code></pre>
<p>nun gut, man lernt ja noch... <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/2222144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2222144</guid><dc:creator><![CDATA[stbase]]></dc:creator><pubDate>Mon, 11 Jun 2012 17:26:12 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Füllen eines Char-Arrays - habe einen Fehler on Mon, 11 Jun 2012 18:11:52 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>strtok verändert aber den Inhalt, data zeigt jedoch auf einen const-Bereich.</p>
</blockquote>
<p>Nein, data ist so definiert:</p>
<p>c++11 Standard N3242=11-0012 schrieb:</p>
<blockquote>
<p>// 23.3.6.4, data access<br />
T* data() noexcept;<br />
const T* data() const noexcept;</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2222156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2222156</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 11 Jun 2012 18:11:52 GMT</pubDate></item></channel></rss>