<?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[Kleines (Pointer)-Problem]]></title><description><![CDATA[<p>Hallo ich übe gerade ein wenig und hab folgende Aufgabe gemacht:<br />
<em>Write a function which puts the characters in a text string in reverse order. The function should use two pinters. The only parameter of the function should be a pointer to the string</em></p>
<pre><code class="language-cpp">void Reverse(char *text[])
{
  unsigned short int anz = 5;  // Wie bekomm ich das dynamisch ?
  char *a = *text, *e = *text + anz, *tmp;
  while (a &lt;= e)
  {
    *tmp = *a;
    *a = *e;
    *e = *tmp;
    a++;
    e--;
  }
}
int main(int argc, char* argv[])
{
  char *text = &quot;Ronald&quot;;
  Reverse(&amp;text);
  cout &lt;&lt; text;
  return 0;
}
</code></pre>
<p>Ich bin noch neu im Pointerkram, leider hat <strong>sizeof text / sizeof text[0]</strong> nichts gebracht und auch <strong>strlen</strong> war hier nicht zu gebrauchen oder ich weis nicht wie wegen den unterschiedlichen typen. Bitte helft mir. Danke <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/topic/177063/kleines-pointer-problem</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 16:56:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/177063.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 27 Mar 2007 20:02:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kleines (Pointer)-Problem on Tue, 27 Mar 2007 20:02:19 GMT]]></title><description><![CDATA[<p>Hallo ich übe gerade ein wenig und hab folgende Aufgabe gemacht:<br />
<em>Write a function which puts the characters in a text string in reverse order. The function should use two pinters. The only parameter of the function should be a pointer to the string</em></p>
<pre><code class="language-cpp">void Reverse(char *text[])
{
  unsigned short int anz = 5;  // Wie bekomm ich das dynamisch ?
  char *a = *text, *e = *text + anz, *tmp;
  while (a &lt;= e)
  {
    *tmp = *a;
    *a = *e;
    *e = *tmp;
    a++;
    e--;
  }
}
int main(int argc, char* argv[])
{
  char *text = &quot;Ronald&quot;;
  Reverse(&amp;text);
  cout &lt;&lt; text;
  return 0;
}
</code></pre>
<p>Ich bin noch neu im Pointerkram, leider hat <strong>sizeof text / sizeof text[0]</strong> nichts gebracht und auch <strong>strlen</strong> war hier nicht zu gebrauchen oder ich weis nicht wie wegen den unterschiedlichen typen. Bitte helft mir. Danke <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/1254166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254166</guid><dc:creator><![CDATA[shadowmasta]]></dc:creator><pubDate>Tue, 27 Mar 2007 20:02:19 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines (Pointer)-Problem on Tue, 27 Mar 2007 20:20:32 GMT]]></title><description><![CDATA[<p>Also fangen wir mal an:</p>
<p>1. Wenn du die Adresse text an die Funktion Reverse() uebergeben moechtest,dann brauchst du da keine Referenz mehr, d.h. du kannst das &amp; Zeichen einfach weglassen, denn die Variable ohne den * ist schon die Adresse.</p>
<p>2. genuegt es, wenn du im Parameter auch nur char *text schreibst... die eckigen Klammern kannst du dir sparen.</p>
<p>3. Wuerde ich dafuer nicht char * benutzen sondern mir mal die STL string anschauen. ich glaube die beinhaltet schon eine Methode reverse();</p>
<p>hier ein kleines beispiel:</p>
<pre><code class="language-cpp">string a;
cin&gt;&gt;a;
a.reverse();
cout&lt;&lt;a;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1254186</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254186</guid><dc:creator><![CDATA[LMwoot]]></dc:creator><pubDate>Tue, 27 Mar 2007 20:20:32 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines (Pointer)-Problem on Tue, 27 Mar 2007 20:39:12 GMT]]></title><description><![CDATA[<p>ad 1: wo Referenz, wo?<br />
ad 2: &quot;die eckigen Klammern&quot; sind der Grund für das &quot;&amp;&quot; welches du für eine Referenz hältst, und natürlich sind sie unnötig<br />
ad 3: er hat eine AUFGABE erhalten, und da es Teil der AUFGABE ist 2 Zeiger zu verwenden sollte er das wohl tun, und nicht einfach std::string::reverse oder std::reverse verwenden.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12759">@shadowmasta</a>: mach aus &quot;char *text[]&quot; einfach &quot;char* text&quot;. Und &quot;text + anz&quot; ist falsch, das muss &quot;text + anz - 1&quot; sein -- zumindest so wie du in der Schleife weitermachst muss es &quot;text + anz - 1&quot; sein, sonst würdest du das Nullbyte welches den String hinten abschliesst auch mit an den Anfang tauschen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1254198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254198</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 27 Mar 2007 20:39:12 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines (Pointer)-Problem on Wed, 28 Mar 2007 06:38:40 GMT]]></title><description><![CDATA[<p>shadowmasta schrieb:</p>
<blockquote>
<p>...<br />
...leider hat <strong>sizeof text / sizeof text[0]</strong> nichts gebracht und auch <strong>strlen</strong> war hier nicht zu gebrauchen ...</p>
</blockquote>
<p>Hi,</p>
<p>also das hat eigentlich nichts mit C++ zu tun, sondern ist reines C <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="😉"
    /> ... aber ich versuche mal zu helfen:<br />
1.) Der &quot;sizeof-&quot;-Trick funktioniert nur bei echten Arrays, nicht mehr, wenn sie &quot;zu Zeigern degeneriert sind&quot; (wie es bei der Übergabe an Funktionen immer passiert).<br />
2.) Wieso &quot;ist strlen() nicht zu gebrauchen&quot; ? Ist hier das Mittel der Wahl ... und außerdem das letzte, was Dir bleibt, wenn Du die Länge nicht explizit übergeben darfst (weswegen std::string auch besser wäre <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>Mal eine Frage vorab: Bist Du sicher, dass Du <strong>C</strong> einsetzen musst und nicht <strong>C++</strong> verwenden darfst ? Andererseits steht da noch, dass man &quot;2 Pointer&quot; verwenden soll .... und dafür hätte man mit Verwendung eines std::strings irgendwie keinen Bedarf....hmmm.</p>
<p>Zum Rest hat der hustbaer schon Wesentliches gesagt:</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>...<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12759">@shadowmasta</a>: mach aus &quot;char *text[]&quot; einfach &quot;char* text&quot;. Und &quot;text + anz&quot; ist falsch, das muss &quot;text + anz - 1&quot; sein -- zumindest so wie du in der Schleife weitermachst muss es &quot;text + anz - 1&quot; sein, sonst würdest du das Nullbyte welches den String hinten abschliesst auch mit an den Anfang tauschen.</p>
</blockquote>
<p>(nur zur weiteren Erläuterung: &quot;text + anz&quot; zeigt auf das Byte hinter dem letzten Zeichen: text+0 -&gt; 1. Zeichen, text+1 -&gt; 2. Zeichen, .... )</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1254274</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254274</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 28 Mar 2007 06:38:40 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines (Pointer)-Problem on Wed, 28 Mar 2007 06:39:01 GMT]]></title><description><![CDATA[<p>Und noch eine Ergänzung: <code>char* tmp;</code> wird dir das Programm recht schnell abrauchen lassen (SegFault) - und als Zwischenvariable für den Ringtausch reicht ein normaler char völlig aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1254277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254277</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 28 Mar 2007 06:39:01 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines (Pointer)-Problem on Wed, 28 Mar 2007 06:40:37 GMT]]></title><description><![CDATA[<p>Ich hätte da noch eine kleine Verständnisfrage:</p>
<p>Wieso:</p>
<pre><code class="language-cpp">char *a = *text, *e = *text + anz, *tmp;
</code></pre>
<p>und nicht</p>
<pre><code class="language-cpp">char *a = text, *e = text + anz, *tmp;
</code></pre>
<p>Er will doch damit vergleichen, ob er am Ende vom char-array angekommen ist, oder nicht? Und da will er doch den Wert von text (also die Adresse) an die pointer a und e übergeben, und nicht etwa das, was an der Stelle im Array steht.</p>
<p>Was habe ich hier bez. Pointer missverstanden?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13624">@Simon2</a>: da steht &quot;text string&quot;, also nicht einfach string. Von daher würde ich darauf tippen, dass, wenn sie std::string in der Schule noch nicht gesehen haben, damit ein char array gemeint ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1254278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254278</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Wed, 28 Mar 2007 06:40:37 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines (Pointer)-Problem on Wed, 28 Mar 2007 06:47:29 GMT]]></title><description><![CDATA[<p>Shinja schrieb:</p>
<blockquote>
<p>Ich hätte da noch eine kleine Verständnisfrage:</p>
<p>Wieso:</p>
<pre><code class="language-cpp">*text
</code></pre>
<p>...</p>
</blockquote>
<p>Naja, sein Reverse bekommt ja keinen char*, sondern einen char** ... da muss man schon einmal dereferenzieren, um einen char* in die Finger zu bekommen.<br />
Was entspricht einem &quot;text string&quot; besser als ein <code>std::basic_string&lt;char&gt;</code> , der std::string nunmal ist ? :p</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1254285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254285</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 28 Mar 2007 06:47:29 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines (Pointer)-Problem on Wed, 28 Mar 2007 11:27:40 GMT]]></title><description><![CDATA[<p>Hallo vielen Dank für die Zahlreichen Antworten. Was ich vergessen habe zu erwähnen das Programm läuft so wie es sein soll <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="😉"
    /><br />
Trotzdem hab ich versucht euch nachzuvollziehen und ja gut es rennt auch :p</p>
<pre><code class="language-cpp">void Reverse(char* text)
{
  unsigned short int anz = 5;  // Statisch is doch dooof :/
  char *a = &amp;text[0], *e = &amp;text[anz];
  char tmp;
  while (a &lt;= e)
  {
    tmp = *a;
    *a = *e;
    *e = tmp;
    a++;
    e--;
  }
}
</code></pre>
<p>Aber davon mal abgesehen war die Aufgabe diese Übung zu machen und meine Frage, ob es eine Möglichkeit gibt die Länge des übergegebenen char-Pointers auszulesen. Warum das mit meinen Methoden nicht ging ist mir nun klar geworden.<br />
Alternativ müsste ich den char bis zum Nullbyte durchgehn.<br />
Danke an alle Erklärbären <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /> das soll C++ sein und ich übe halt mit den Aufgaben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1254490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254490</guid><dc:creator><![CDATA[shadowmasta]]></dc:creator><pubDate>Wed, 28 Mar 2007 11:27:40 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines (Pointer)-Problem on Wed, 28 Mar 2007 11:25:53 GMT]]></title><description><![CDATA[<p>Da ist immer noch ein * zu viel: <code>char *a = text, *e = text + anz-1;</code> (und die Länge kannst du mit strlen() ermitteln).</p>
<p>PS: Wenn es C++ sein soll, vergiss char-Pointer für den Moment und nimm dir einen std::string.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1254492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254492</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 28 Mar 2007 11:25:53 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines (Pointer)-Problem on Wed, 28 Mar 2007 11:33:38 GMT]]></title><description><![CDATA[<p>Nun endlich durch die Änderungen geht es nun mit strlen().<br />
Vielen vielen Dank <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>
<p>In dem Buch wurde nur <strong>char</strong> behandelt und damit geht ja auch alles, wenn auch umständlicher :p<br />
Ok ich danke euch allen nun ist diese Aufgabe gelöst.</p>
<pre><code class="language-cpp">unsigned short int anz = strlen(text)-1;
char *a = text, *e = text + anz;
</code></pre>
<p>mfg <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1254502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254502</guid><dc:creator><![CDATA[shadowmasta]]></dc:creator><pubDate>Wed, 28 Mar 2007 11:33:38 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines (Pointer)-Problem on Wed, 28 Mar 2007 11:36:46 GMT]]></title><description><![CDATA[<p>Auch wenn das Ergebnis dasselbe ist:<br />
Die Länge des strings ist strlen(text) (und nicht strlen(text) - 1)<br />
Die letzte Stelle des strings ist text + länge - 1 (und nicht text + länge)</p>
<p>Weil: Die letzte Stelle eines 1 Zeichen langen Strings ist 0 <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><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>
]]></description><link>https://www.c-plusplus.net/forum/post/1254504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254504</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 28 Mar 2007 11:36:46 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines (Pointer)-Problem on Wed, 28 Mar 2007 11:41:02 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>seeehr wichtig finde ich noch diesen Hinweis von CStoll, den Du <em><strong>unbedingt beherzigen</strong></em> solltest:</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>Und noch eine Ergänzung: <code>char* tmp;</code> wird dir das Programm recht schnell abrauchen lassen (SegFault) ...</p>
</blockquote>
<p>Hier nochmal der Kontext:</p>
<p>shadowmasta schrieb:</p>
<blockquote>
<p>...</p>
<pre><code class="language-cpp">char *text = &quot;Ronald&quot;;
</code></pre>
</blockquote>
<p>Hier lässt Du text auf <strong>readonly-Speicher</strong> zeigen und hier:</p>
<p>shadowmasta schrieb:</p>
<blockquote>
<p>...</p>
<pre><code class="language-cpp">...  char *a = *text
... *a = *e;
</code></pre>
</blockquote>
<p><strong>schreibst</strong> Du trotzdem rein !!<br />
Das führt zu &quot;undefinierten Ergebnissen&quot;, was üblicherweise verglichen wird mit dem Sprung ohne Fallschirm aus einem Flugzeug: Auch wenn beim erstem Mal ein zufällig vorbeifliegender Wildentenschwarm Deinen Fall abgebremst hat, würde ich es<br />
a) nicht nocheinmal tun und<br />
b) auf keinen Fall unter &quot;Klappt doch - mach ich jetzt immer so !&quot; verbuchen.</p>
<p>Ferner ist das hier:</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>...<br />
- und als Zwischenvariable für den Ringtausch reicht ein normaler char völlig aus...</p>
</blockquote>
<p>auch noch eine schöne Aufgabe, falls Du noch Lust auf etwas Lernen hast.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1254510</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254510</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 28 Mar 2007 11:41:02 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines (Pointer)-Problem on Wed, 28 Mar 2007 11:45:55 GMT]]></title><description><![CDATA[<p>Hehe ja das ist mir klar aber wie du schon sagtest und auch viele andere Leute: Das Ergebnis zählt <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="😉"
    /> Trotzdem danke für den Hinweis ich werde es in Zukunft an deinem Beispiel ausrichten der Sauberkeit wegen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a>: bezieht sich das noch auf den aktuellen Code ?</p>
<pre><code class="language-cpp">void Reverse(char* text)
{
  unsigned short int anz = strlen(text);
  char *a = text, *e = text + anz-1;
  char tmp;
  while (a &lt;= e)
  {
    tmp = *a;
    *a = *e;
    *e = tmp;
    a++;
    e--;
  }
}
</code></pre>
<p>PS. So tief bin ich auch nicht in der Materie aber ich lasse mich gerne berichtigen <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/1254512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254512</guid><dc:creator><![CDATA[shadowmasta]]></dc:creator><pubDate>Wed, 28 Mar 2007 11:45:55 GMT</pubDate></item></channel></rss>