<?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[Unerwartete Werte beim Ausgeben eines Arrays]]></title><description><![CDATA[<p>Hallo,<br />
ich bin neu hier im Forum und habe folgendes Problem:</p>
<p>Das Programm soll den Wert, der vor dem ersten x steht, ausgeben.<br />
Das Problem ist, dass mein Programm zwar den Wert ausgibt, aber noch mehr<br />
Zeichen hintendran hängt.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cstdio&gt;
using namespace std;

int main()
{
	char gleichung[] = &quot;2x + 7x + 5&quot;;
	char*ax;

	int anzahl=0;
	for(int i=0;gleichung[i] != 'x';i++)
	{
		anzahl += 1;
	}
	ax = new char[anzahl];

	for(int i=0;i&lt;anzahl;i++)
	{
		ax[i] = gleichung[i];
	}

	cout &lt;&lt; gleichung &lt;&lt; endl;
	cout &lt;&lt; ax &lt;&lt; endl;

	fflush(stdin);
	getchar();

	delete [] ax;

	return 0;
}
</code></pre>
<p>Meine Frage also:<br />
Wo kommen die zusätzlichen Zeichen her?</p>
<p>Viele Grüße<br />
Sagara</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/273742/unerwartete-werte-beim-ausgeben-eines-arrays</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 23:32:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/273742.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 12 Sep 2010 17:47:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unerwartete Werte beim Ausgeben eines Arrays on Sun, 12 Sep 2010 17:47:09 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich bin neu hier im Forum und habe folgendes Problem:</p>
<p>Das Programm soll den Wert, der vor dem ersten x steht, ausgeben.<br />
Das Problem ist, dass mein Programm zwar den Wert ausgibt, aber noch mehr<br />
Zeichen hintendran hängt.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cstdio&gt;
using namespace std;

int main()
{
	char gleichung[] = &quot;2x + 7x + 5&quot;;
	char*ax;

	int anzahl=0;
	for(int i=0;gleichung[i] != 'x';i++)
	{
		anzahl += 1;
	}
	ax = new char[anzahl];

	for(int i=0;i&lt;anzahl;i++)
	{
		ax[i] = gleichung[i];
	}

	cout &lt;&lt; gleichung &lt;&lt; endl;
	cout &lt;&lt; ax &lt;&lt; endl;

	fflush(stdin);
	getchar();

	delete [] ax;

	return 0;
}
</code></pre>
<p>Meine Frage also:<br />
Wo kommen die zusätzlichen Zeichen her?</p>
<p>Viele Grüße<br />
Sagara</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1951671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1951671</guid><dc:creator><![CDATA[Sagara]]></dc:creator><pubDate>Sun, 12 Sep 2010 17:47:09 GMT</pubDate></item><item><title><![CDATA[Reply to Unerwartete Werte beim Ausgeben eines Arrays on Sun, 12 Sep 2010 17:57:02 GMT]]></title><description><![CDATA[<p>Der Puffer, auf welchen ax zeigt, hat keine Nullterminierung. Daher hast du undefiniertes Verhalten. Wahrscheinlich wird einfach über die Puffergrenze hinaus gelesen, bis das erste Nullbyte gefunden wird.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1951674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1951674</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 12 Sep 2010 17:57:02 GMT</pubDate></item><item><title><![CDATA[Reply to Unerwartete Werte beim Ausgeben eines Arrays on Sun, 12 Sep 2010 18:14:37 GMT]]></title><description><![CDATA[<p>Danke für die schnelle Antwort.<br />
Aber so ganz funktionieren will das immer noch nicht.<br />
Mache ich das so richtig mit der Nullterminierung?</p>
<pre><code class="language-cpp">int anzahl=0;
    for(int i=0;gleichung[i] != 'x';i++)
    {
        anzahl += 1;
    }
    ax = new char[anzahl];

    for(int i=0;i&lt;anzahl;i++)
    {
        ax[i] = gleichung[i];
    }

    ax[sizeof(ax)] = '\0';
</code></pre>
<p>Außerdem bekomme ich jetzt eine Fehlermeldung, die auf eine Beschädigung des Heaps zurückzuführen sein könnte. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1951684</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1951684</guid><dc:creator><![CDATA[Sagara]]></dc:creator><pubDate>Sun, 12 Sep 2010 18:14:37 GMT</pubDate></item><item><title><![CDATA[Reply to Unerwartete Werte beim Ausgeben eines Arrays on Sun, 12 Sep 2010 18:38:30 GMT]]></title><description><![CDATA[<p>Sagara schrieb:</p>
<blockquote>
<p>Mache ich das so richtig mit der Nullterminierung?</p>
</blockquote>
<p>Nein, was ja auch die Fehlermeldung schon andeutet <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="🙂"
    /><br />
<code>sizeof(ax)</code> gibt dir nicht die Puffergrösse zurück. <code>ax</code> ist nur ein Zeiger, daher gibt <code>sizeof(ax)</code> die Grösse eines Zeigers zurück. Auf einem 32 Bit System wäre das ein Wert von 4. Wenn man deinen Code anschaut, dann weiss man bereits, dass dies ausserhalb des Puffers ist und du schreibst somit in Speicher, welcher dir nicht gehört. Zudem hast du gar keinen Platz im Puffer reserviert für die Nullterminierung.</p>
<pre><code class="language-cpp">// ...

ax = new char[anzahl + 1];
//                   ^^^ Wir brauchen eine Stelle mehr.

for(int i = 0; i &lt; anzahl; i++) 
{ 
  ax[i] = gleichung[i]; 
}

ax[anzahl] = '\0'; // Und schreiben dann die Nullterminierung an die letzte Stelle.

// ...
</code></pre>
<p>Grüssli</p>
<p>PS: Dir ist schon bewusst, dass es Dinge wie <code>std::string</code> gibt, welche solche Arbeiten extrem vereinfachen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1951687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1951687</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 12 Sep 2010 18:38:30 GMT</pubDate></item><item><title><![CDATA[Reply to Unerwartete Werte beim Ausgeben eines Arrays on Sun, 12 Sep 2010 18:28:00 GMT]]></title><description><![CDATA[<p>Sagara schrieb:</p>
<blockquote>
<pre><code class="language-cpp">char gleichung[] = &quot;2x + 7x + 5&quot;; 

int anzahl=0;
for(int i=0;gleichung[i] != 'x';i++)
    {
        anzahl += 1;
    }
    ax = new char[anzahl];

    for(int i=0;i&lt;anzahl;i++)
    {
        ax[i] = gleichung[i];
    }

    ax[sizeof(ax)] = '\0';
</code></pre>
</blockquote>
<p>Statt zu fragen, versuch doch mal zu verstehen was du da machst ...</p>
<p>du &quot;reservierst&quot; unter dem &quot;namen&quot; <code>ax</code> Speicherplatz für <strong>anzahl</strong> characters. <code>anzahl</code> ermittelst du aus der Position des ersten 'x' in deiner Formel ... also wird anzahl == 1 sein. Also reservierst du 1 Zeichen im array ax. Da kopierst du die 2 rein. Irgendwo dahinter packst du noch ne '\0' ... kein Wunder das dein Heap krepiert <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>Wenns geht spar dir die <code>char arrays</code> , <code>new</code> und <code>delete</code> . Nimm <code>std::string</code> das ist einfacher. Google mal <code>std::string</code> und schau dort nach, da gibt es Methoden um Strings zu zerlegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1951688</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1951688</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Sun, 12 Sep 2010 18:28:00 GMT</pubDate></item><item><title><![CDATA[Reply to Unerwartete Werte beim Ausgeben eines Arrays on Sun, 12 Sep 2010 18:30:00 GMT]]></title><description><![CDATA[<p>Vielen, vielen Dank!<br />
Jetzt funktioniert es wie es sollte. <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>
<p>Ich weiß, dass es die Klasse String gibt, aber ich wollte mich ein bisschen mit char Arrays vertraut machen. Kann bestimmt nichts schaden. <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>Viele Grüße<br />
Sagara</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1951692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1951692</guid><dc:creator><![CDATA[Sagara]]></dc:creator><pubDate>Sun, 12 Sep 2010 18:30:00 GMT</pubDate></item></channel></rss>