<?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[Problem mit pointern]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich bin noch recht frisch im bereich c++ und muss mich mit pointern auseinander setzten</p>
<p>ich würde euch gerne mal die aufgabe zeigen die ich am bearbeiten bin und hoffe das ihr mir sagen könnt, wo evtl der fehler liegt, weil ich finde ihn einfach nicht.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;suche.cpp&quot;

using namespace std;

const int LAENGE=200;

int main(){
	//variablen deklaration
        char* kette = new char[LAENGE];

        cout &lt;&lt; &quot;Bitte Zeichenkette angeben :&quot; &lt;&lt;endl;
        cin &gt;&gt; kette;
        cout &lt;&lt; &quot;Bitte das zu suchende Zeichen angeben: &quot;;
        cin &gt;&gt; zeichen;        	 

  	 tmp = searchChar(kette,zeichen);
      	 cout &lt;&lt; tmp;
</code></pre>
<p>das ist meine main<br />
bevor nun kommt warum ich das nicht mit string mache ... darf ich nicht und das hier dient auch zur übung wegen verständnis von pointern, was eigentlich nicht so schwer ist, aber irgendwie gelingt mir nicht die übergabe zu meiner funktion die so ausschaut</p>
<pre><code class="language-cpp">int searchChar(char* kette, char zeichen){
        char* posi = kette;
        int tmp = -1;
        int zaehler=0;

        while(posi++){
        	if (*posi==zeichen){
        		return zaehler;
        	}
        	zaehler++;
        }
}
</code></pre>
<p>hoffe irgendwer könnte mir sagen wo ich einen denk fehler drin habe</p>
<p>mfg<br />
foexle</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/202729/problem-mit-pointern</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 21:21:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/202729.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 14 Jan 2008 20:20:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit pointern on Mon, 14 Jan 2008 20:20:46 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich bin noch recht frisch im bereich c++ und muss mich mit pointern auseinander setzten</p>
<p>ich würde euch gerne mal die aufgabe zeigen die ich am bearbeiten bin und hoffe das ihr mir sagen könnt, wo evtl der fehler liegt, weil ich finde ihn einfach nicht.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;suche.cpp&quot;

using namespace std;

const int LAENGE=200;

int main(){
	//variablen deklaration
        char* kette = new char[LAENGE];

        cout &lt;&lt; &quot;Bitte Zeichenkette angeben :&quot; &lt;&lt;endl;
        cin &gt;&gt; kette;
        cout &lt;&lt; &quot;Bitte das zu suchende Zeichen angeben: &quot;;
        cin &gt;&gt; zeichen;        	 

  	 tmp = searchChar(kette,zeichen);
      	 cout &lt;&lt; tmp;
</code></pre>
<p>das ist meine main<br />
bevor nun kommt warum ich das nicht mit string mache ... darf ich nicht und das hier dient auch zur übung wegen verständnis von pointern, was eigentlich nicht so schwer ist, aber irgendwie gelingt mir nicht die übergabe zu meiner funktion die so ausschaut</p>
<pre><code class="language-cpp">int searchChar(char* kette, char zeichen){
        char* posi = kette;
        int tmp = -1;
        int zaehler=0;

        while(posi++){
        	if (*posi==zeichen){
        		return zaehler;
        	}
        	zaehler++;
        }
}
</code></pre>
<p>hoffe irgendwer könnte mir sagen wo ich einen denk fehler drin habe</p>
<p>mfg<br />
foexle</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1436649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1436649</guid><dc:creator><![CDATA[foexle]]></dc:creator><pubDate>Mon, 14 Jan 2008 20:20:46 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit pointern on Mon, 14 Jan 2008 20:25:34 GMT]]></title><description><![CDATA[<p>Was geht denn genau nicht?</p>
<p>Spontan sehe ich, dass der mit new allozierte Speicher nicht mit delete freigegeben wird (erzeugt ein Memory Leak).</p>
<p>int tmp wird nicht gebraucht, also raus damit.</p>
<p>Das umkopieren des Pointers nach posi ist nicht nötig, da der Pointer schon by Value übergeben wird.</p>
<p>Ausserdem ist zeichen nicht definiert... ev. ist das nur hier im Forums Code so.</p>
<p>Grüsse<br />
Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1436652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1436652</guid><dc:creator><![CDATA[simon.gysi]]></dc:creator><pubDate>Mon, 14 Jan 2008 20:25:34 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit pointern on Mon, 14 Jan 2008 20:26:11 GMT]]></title><description><![CDATA[<p>SUCHE BENUTZEN, wurde TAUSEND MAL besprochen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1436653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1436653</guid><dc:creator><![CDATA[tssssssssss]]></dc:creator><pubDate>Mon, 14 Jan 2008 20:26:11 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit pointern on Mon, 14 Jan 2008 20:30:49 GMT]]></title><description><![CDATA[<p>gugugs <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>danke für die schnelle antwort ..</p>
<p>ja zeichen ist definiert, vergessen hier rein zu kopieren ... das mit dem speicherleek hast du recht, aber das ist ja noch nicht das gesamte programm <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="🙂"
    /> der wird nacher freigegeben.</p>
<p>evtl liegt es auch daran, das ich das vöoolig falsch übersetzte.</p>
<p>&lt;xxx&gt;g++ suche.cpp ueb03.cpp<br />
/tmp/cc6OqWdK.o: In function <code>searchChar(char*, char)': ueb03.cpp:(.text+0x0): multiple definition of</code>searchChar(char*, char)'<br />
/tmp/cc0RFz2x.o:suche.cpp:(.text+0x0): first defined here<br />
collect2: ld gab 1 als Ende-Status zurück</p>
<p>in der suche ist die function drin ....</p>
<p>und ja ich weis wie man in einem forum vorgeht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /> sicher habe ich die suche benutzt, aber da ich noch sehr wenig erfahrung habe, kann ich die keine passende antwort auf meine frage finden</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1436659</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1436659</guid><dc:creator><![CDATA[foexle]]></dc:creator><pubDate>Mon, 14 Jan 2008 20:30:49 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit pointern on Mon, 14 Jan 2008 20:55:06 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &quot;suche.cpp&quot;
</code></pre>
<p>Man inkludiert die Header und nicht die Implentierungs-Dateien. (Nennt man die so?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1436678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1436678</guid><dc:creator><![CDATA[The-Kenny]]></dc:creator><pubDate>Mon, 14 Jan 2008 20:55:06 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit pointern on Mon, 14 Jan 2008 20:55:14 GMT]]></title><description><![CDATA[<p>hi,<br />
in der geposteten funktion int searchChar(char* kette, char zeichen)<br />
ist das hier while(posi++) recht ungünstig, weil nämlich<br />
hier if (*posi==zeichen)<br />
der inhalt von *posi das zweite zeichen von kette ist ( falls strlen(kette) &gt;= 2 )<br />
d.h. wenn jemand ein &quot;a&quot; als zeichenkette eingibt, wirst du es nie finden <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/1436679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1436679</guid><dc:creator><![CDATA[bonus dereferenzierer]]></dc:creator><pubDate>Mon, 14 Jan 2008 20:55:14 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit pointern on Mon, 14 Jan 2008 20:56:03 GMT]]></title><description><![CDATA[<p>du inkludierst die suche.cpp in deiner ueb03.cpp datei, damit machst du suche.cpp und ueb03.cpp zu einer einzigen übersetzungseinheit. dann sagst du dem compiler, dass suche.cpp außerdem noch eine eigene übersetzungseinheit darstellt. zweimal dieselbe definition in zwei verschiedenen übersetzungseinheiten ist aber ein fehler.<br />
lösung: entweder in ueb03.cpp suche.cpp nicht inkludieren und die funktion searchChar nur deklarieren (in den FAQs gibt es einen beitrag, der dir den unterschied zwischen definition und deklaration erklärt), das ist der weg, den du gehen solltest.<br />
oder: du sagst g++, er soll nur eine übersetzungseinheit (ueb03.cpp) übersetzen.</p>
<p>zum inhalt der funktion:</p>
<pre><code class="language-cpp">int searchChar(char* kette, char zeichen){
        char* posi = kette;
        int tmp = -1;
        int zaehler=0;

        while(posi++){
            if (*posi==zeichen){
                return zaehler;
            }
            zaehler++;
        }
}
</code></pre>
<p>das erste was du machst, ist posi zu inkrementieren. das heißt nun, das du erst bei index 1 (und nicht 0) anfängst. danach die schleifenbedingung: du durchsuchst den string solange, bis du das passende zeichen findest, nur leider ist die abbruchbedingung vermurkst: posi wird solange inkrementiert, bis es über den maximalwert hinausgeht und wieder bei 0 ankommt. d.h. wenn deine funktion nach einem zeichen suchen soll, das nicht in deinem char* enthalten ist, wird es wahrscheinlich eine access violation geben. im schlimmsten fall wirst du von kleinen, roten gnomen attackiert.</p>
<p>abgesehen von diesen logischen fehlern solltest du die zeichenkette als const char* übergeben, du änderst sie ja nicht. außerdem solltest du bei g++ mal die option -Wall aktivieren. dann sagt dir g++ auch, dass es die möglichkeit gibt, dass deine funktion, die eigentlich einen int zurückgibt, beendet und gar nichts zurückgibt.</p>
<p>auf jedenfall gibt es mehrere lösungen für dich.<br />
straight-forward, einfach die fehler, die ich aufgezählt habe ausmerzen:<br />
mit kette bei index 0 anfangen, am ende der schleife inkrementieren, falls das nächste zeichen eine '\0' ist, abbrechen. sieht so aus:</p>
<pre><code class="language-cpp">do //mit index 0 anfangen
{
  if (*posi==zeichen){ 
   return zaehler;
  }
  ++zaehler;
} while (*++posi); //inkrementieren und überprüfen in einem
return -1; //not-found
</code></pre>
<p>oder du subtrahierst zwei zeiger voneinander, dann bekommst du ebenfalls den richtigen wert:</p>
<pre><code class="language-cpp">do
{
  if (*posi==zeichen) return posi - kette;
} while (*++posi);
return -1; //not-found
</code></pre>
<p>dann sollte dein rückgabetyp allerdings nicht int (auch wenn das möglich ist), sondern ptrdiff_t (aus &lt;cstddef&gt;) sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1436680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1436680</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Mon, 14 Jan 2008 20:56:03 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit pointern on Mon, 14 Jan 2008 20:59:02 GMT]]></title><description><![CDATA[<p>ok danke für die ausführliche erklärung</p>
<p>das hilft schon sehr weiter <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> zumindest mal das mit dem include verstanden und auch wegen compelieren <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>das andere versuch ich sofort <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>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1436681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1436681</guid><dc:creator><![CDATA[foexle]]></dc:creator><pubDate>Mon, 14 Jan 2008 20:59:02 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit pointern on Tue, 15 Jan 2008 07:57:38 GMT]]></title><description><![CDATA[<p>foexle schrieb:</p>
<blockquote>
<p>...<br />
bevor nun kommt warum ich das nicht mit string mache ... darf ich nicht und das hier dient auch zur übung wegen verständnis von pointern, ...</p>
</blockquote>
<p>Dann sag Deinem Lehrer mal, dass er nicht &quot;Zeiger-Übungen&quot; mit &quot;Zeichenketten-Übungen&quot; mischen soll. Das führt zu einem &quot;Zweifrontenkrieg&quot; (Rumschlagen mit 0-Terminierung, str-/printf-/IO-Funktionen, SegFaults, ...) und schlechten Gewohnheiten.<br />
Wenn er kein Beispiel mit einem int-Array zustande bekommt, sollte er sein Gehalt zurückgeben.</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1436773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1436773</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 15 Jan 2008 07:57:38 GMT</pubDate></item></channel></rss>