<?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 * als Funktionsparameter]]></title><description><![CDATA[<p>Aloha zusammen,</p>
<p>da ich nicht in einem Stichwort mein Problem schildern kann, bin ich leider bei der Forumssuche nicht weiter gekommen : /.</p>
<p>Ich vermute, dass ich einfach mit der Pointergeschichte noch nicht ganz durchgestiegen bin: umso wichtiger nun da reinen Tisch zu machen : ).</p>
<p>Folgendes Szenario:</p>
<p>packetc.h:</p>
<pre><code class="language-cpp">class packetc
{
private:
 char * buffer;    // Inhalt des Packets
public:
 // Konstruktor / Destruktor:
 packetc()  { buffer = new char[1024]; };
 ~packetc() { delete [] buffer; };

 // Funktionen zum Packet fuellen:
 void fill(char * c) { *buffer = *c; };     // Hier ist mein Problem!

 // Funktionen zum Inhalt ausgeben:
 char * content() { return buffer; };
};
</code></pre>
<p>main.cpp:</p>
<pre><code class="language-cpp">#include &quot;packetc.h&quot;
#include &lt;iostream&gt;

int main()
{
 packetc packet;
 char * buffer = new char[1024];

 std::cout &lt;&lt; &quot;Inhalt des Packets: &quot;;
 std::cin &gt;&gt; buffer;                      // Ueberlauf kann sein, ist hier vereinfacht.
 std::cout &lt;&lt; &quot;Gebe den Inhalt aus: &quot; &lt;&lt; packet.content(); // Fehlende \0, vereinfacht.

 delete [] buffer;
 return 0;
}
</code></pre>
<p>Das Problem ist, dass nur das erste Zeichen ausgegeben wird. Ich vermute den Fehler in der Übergabe. Ich dachte mit</p>
<pre><code class="language-cpp">*buffer = *c
</code></pre>
<p>erreiche ich: In das Feld, auf das buffer zeigt, schreibe den Inhalt des Feldes, auf das c zeigt? Ist das so korrekt?</p>
<p>(Beispiel:)</p>
<pre><code>Inhalt des Packets: hallo
Gebe den Inhalt aus: h ===================================(...)
</code></pre>
<p>Ich hoffe Ihr versteht mein Problem ; ).</p>
<p>MfG,</p>
<p>kausa.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/218864/char-als-funktionsparameter</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 18:24:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/218864.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 26 Jul 2008 15:27:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to char * als Funktionsparameter on Sat, 26 Jul 2008 15:27:03 GMT]]></title><description><![CDATA[<p>Aloha zusammen,</p>
<p>da ich nicht in einem Stichwort mein Problem schildern kann, bin ich leider bei der Forumssuche nicht weiter gekommen : /.</p>
<p>Ich vermute, dass ich einfach mit der Pointergeschichte noch nicht ganz durchgestiegen bin: umso wichtiger nun da reinen Tisch zu machen : ).</p>
<p>Folgendes Szenario:</p>
<p>packetc.h:</p>
<pre><code class="language-cpp">class packetc
{
private:
 char * buffer;    // Inhalt des Packets
public:
 // Konstruktor / Destruktor:
 packetc()  { buffer = new char[1024]; };
 ~packetc() { delete [] buffer; };

 // Funktionen zum Packet fuellen:
 void fill(char * c) { *buffer = *c; };     // Hier ist mein Problem!

 // Funktionen zum Inhalt ausgeben:
 char * content() { return buffer; };
};
</code></pre>
<p>main.cpp:</p>
<pre><code class="language-cpp">#include &quot;packetc.h&quot;
#include &lt;iostream&gt;

int main()
{
 packetc packet;
 char * buffer = new char[1024];

 std::cout &lt;&lt; &quot;Inhalt des Packets: &quot;;
 std::cin &gt;&gt; buffer;                      // Ueberlauf kann sein, ist hier vereinfacht.
 std::cout &lt;&lt; &quot;Gebe den Inhalt aus: &quot; &lt;&lt; packet.content(); // Fehlende \0, vereinfacht.

 delete [] buffer;
 return 0;
}
</code></pre>
<p>Das Problem ist, dass nur das erste Zeichen ausgegeben wird. Ich vermute den Fehler in der Übergabe. Ich dachte mit</p>
<pre><code class="language-cpp">*buffer = *c
</code></pre>
<p>erreiche ich: In das Feld, auf das buffer zeigt, schreibe den Inhalt des Feldes, auf das c zeigt? Ist das so korrekt?</p>
<p>(Beispiel:)</p>
<pre><code>Inhalt des Packets: hallo
Gebe den Inhalt aus: h ===================================(...)
</code></pre>
<p>Ich hoffe Ihr versteht mein Problem ; ).</p>
<p>MfG,</p>
<p>kausa.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554032</guid><dc:creator><![CDATA[kausalitaetsfalle]]></dc:creator><pubDate>Sat, 26 Jul 2008 15:27:03 GMT</pubDate></item><item><title><![CDATA[Reply to char * als Funktionsparameter on Sat, 26 Jul 2008 15:47:10 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">char* pChar = new char[1024];
</code></pre>
<p>Hier passiert nichts anderes, als das <code>1024 * sizeof(char)</code> Bytes in einem aneinander hängendem Block für dich reserviert wird. Zurückgegeben wird die Adresse auf das erste Byte dieses Blockes.</p>
<p>Wenn du nun das folgende machst:</p>
<pre><code class="language-cpp">// Angenommen pSrc und pDest sind beides solche Blöcke:
*pDest = *pSrc;
</code></pre>
<p>Dann dereferenzierst du diesen Zeiger auf die Adresse des ersten Bytes. Es wird geschaut was für ein Typ die Zeiger haben und entsprechend wird auf das erste Element des Blocks zugegriffen. Dann findet die Zuweisung statt. Du kopierst also genau ein Element und den Rest rührst du nicht an.</p>
<p>Um alles zu kopieren, musst du also über alle Elemente iterieren, was ja ganz einfach mit Zeigern geht:</p>
<pre><code class="language-cpp">for(int i = 0; i &lt; Size; ++i)
{ *pDest++ = *pSrc++; }
</code></pre>
<p>Oder man verwendet gleich die Algorithmen aus der Standard Bibliothek:</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;

std::copy(pSrc, pSrc + Size, pDest);
</code></pre>
<p>Die Bereichsprüfung solltest du natürlich nicht vergessen. Die Destination sollte immer gleichviel oder mehr Speicherplatz besetzen, als die Source.</p>
<p>Ich hoffe das hilft weiter.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554044</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 26 Jul 2008 15:47:10 GMT</pubDate></item><item><title><![CDATA[Reply to char * als Funktionsparameter on Sat, 26 Jul 2008 15:48:08 GMT]]></title><description><![CDATA[<p>Der Zeiger zeigt nur auf das erste Zeichen, aber mit Zeigerarithmetik kannst du über das gesamte Feld iterieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554045</guid><dc:creator><![CDATA[Jasc]]></dc:creator><pubDate>Sat, 26 Jul 2008 15:48:08 GMT</pubDate></item><item><title><![CDATA[Reply to char * als Funktionsparameter on Sat, 26 Jul 2008 15:50:08 GMT]]></title><description><![CDATA[<p>Ah! Vielen lieben Dank. : ).</p>
<p>Dann war meine Vermutung richtig. Ich bin beruhigt, wieder etwas gelernt : ).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554048</guid><dc:creator><![CDATA[kausalitaetsfalle]]></dc:creator><pubDate>Sat, 26 Jul 2008 15:50:08 GMT</pubDate></item><item><title><![CDATA[Reply to char * als Funktionsparameter on Sat, 26 Jul 2008 16:35:44 GMT]]></title><description><![CDATA[<p>Verzeiht den Doppelpost.</p>
<p>Bezüglich:</p>
<p>Dravere schrieb:</p>
<blockquote>
<p>Die Bereichsprüfung solltest du natürlich nicht vergessen. Die Destination sollte immer gleichviel oder mehr Speicherplatz besetzen, als die Source.</p>
</blockquote>
<p>Wie kriege ich denn den benötigten Speicherplatz heraus, ohne den Pointer zu iterieren, wenn ich nicht weiß, wie groß das Array ist?</p>
<pre><code class="language-cpp">char buffer = new char[iDynamisch];
int iSize = sizeof(*buffer); // liefert die Groeße des ersten Feldes: 1
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1554076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554076</guid><dc:creator><![CDATA[kausalitaetsfalle]]></dc:creator><pubDate>Sat, 26 Jul 2008 16:35:44 GMT</pubDate></item><item><title><![CDATA[Reply to char * als Funktionsparameter on Sat, 26 Jul 2008 16:51:37 GMT]]></title><description><![CDATA[<p>Normalerweise merkt man sich die Grösse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1554086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1554086</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 26 Jul 2008 16:51:37 GMT</pubDate></item></channel></rss>