<?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[Anfängerfrage mit Zeiger]]></title><description><![CDATA[<p>Hallo,<br />
mir ist da was total unlogisch, und zwar in folgendem Programmteil:</p>
<p>class Person<br />
{<br />
char name[MAXNAMELENGTH + 1];<br />
int age;<br />
public:<br />
void setName(const char *pNam);<br />
void setAge(int ag);<br />
void print(FILE *pf) const;<br />
int scan(FILE *pf);<br />
};</p>
<p>void Person::setName(const char *pNam)<br />
{<br />
strcpy(name, pNam);<br />
}</p>
<p>Die Funktion strcpy(name, pNam); hat doch in pNam die Adresse von dem was er übergeben bekommen hat (z.B. father.setName(&quot;Karl&quot;)). Dann wird doch so wie ich es sehe nur die ADRESSE in name gespeichert und doch nicht der Inhalt auf was pNam zeigt.</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/152046/anfängerfrage-mit-zeiger</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 19:47:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/152046.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 02 Jul 2006 12:30:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Anfängerfrage mit Zeiger on Sun, 02 Jul 2006 12:30:04 GMT]]></title><description><![CDATA[<p>Hallo,<br />
mir ist da was total unlogisch, und zwar in folgendem Programmteil:</p>
<p>class Person<br />
{<br />
char name[MAXNAMELENGTH + 1];<br />
int age;<br />
public:<br />
void setName(const char *pNam);<br />
void setAge(int ag);<br />
void print(FILE *pf) const;<br />
int scan(FILE *pf);<br />
};</p>
<p>void Person::setName(const char *pNam)<br />
{<br />
strcpy(name, pNam);<br />
}</p>
<p>Die Funktion strcpy(name, pNam); hat doch in pNam die Adresse von dem was er übergeben bekommen hat (z.B. father.setName(&quot;Karl&quot;)). Dann wird doch so wie ich es sehe nur die ADRESSE in name gespeichert und doch nicht der Inhalt auf was pNam zeigt.</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090070</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090070</guid><dc:creator><![CDATA[Helene]]></dc:creator><pubDate>Sun, 02 Jul 2006 12:30:04 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage mit Zeiger on Sun, 02 Jul 2006 12:39:44 GMT]]></title><description><![CDATA[<p>Helene schrieb:</p>
<blockquote>
<p>Dann wird doch so wie ich es sehe nur die ADRESSE in name gespeichert und doch nicht der Inhalt auf was pNam zeigt.</p>
</blockquote>
<p>Doch, es wird der Inhalt kopiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090085</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 02 Jul 2006 12:39:44 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage mit Zeiger on Sun, 02 Jul 2006 12:44:53 GMT]]></title><description><![CDATA[<p>Warum wir der Inhalt kopiert, pNam ist doch die Adresse des Zeiger?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090091</guid><dc:creator><![CDATA[Helene]]></dc:creator><pubDate>Sun, 02 Jul 2006 12:44:53 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage mit Zeiger on Sun, 02 Jul 2006 12:49:08 GMT]]></title><description><![CDATA[<p>So (oder ähnlich) ist strcpy implementiert:</p>
<pre><code class="language-cpp">char *strcpy( char *dest, const char *src )
{
  char *tmp = dest;
  while( (*dest++ = *src++) != '\0' ); // hier wird mittels Zeiger-Arithmetik der Inhalt kopiert
  return tmp;
}
</code></pre>
<p>Aufgrund dieser Implementierung mit char ist diese Funktion auch nur für ANSI geeignet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090094</guid><dc:creator><![CDATA[Erhard Henkes]]></dc:creator><pubDate>Sun, 02 Jul 2006 12:49:08 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage mit Zeiger on Sun, 02 Jul 2006 13:21:06 GMT]]></title><description><![CDATA[<p>DANKE!!!<br />
Noch eine Anmerkung: Wenn ich die Fkt mit father.setName(&quot;Karl&quot;) aufrufe, ist dann die 0te Stelle ein &quot; ?? Oder wann oder warum brauch ich diese Anführungszeichen?</p>
<p>Stell mich vielleicht etwas. Ich habe Microsoft Visual Studio 2005 und bei mir läuft folgendes Programm nicht. Woran liegt das bzw. was muss ich ändern. mit .Net hat es funktioniert.</p>
<p>#include &lt;iostream&gt;<br />
#include &lt;cstring&gt;<br />
using namespace std;</p>
<p>#define MAXNAMELENGTH 64<br />
class Person<br />
{<br />
char name[MAXNAMELENGTH + 1];<br />
int age;<br />
public:<br />
void setName(const char *pNam);<br />
void setAge(int ag);<br />
void print(FILE *pf) const;<br />
int scan(FILE *pf);<br />
};</p>
<p>void Person::setName(const char *pNam)<br />
{<br />
strcpy(name, pNam);<br />
}</p>
<p>void Person::setAge(int ag)<br />
{<br />
age = ag;<br />
}</p>
<p>void Person::print(FILE *pf) const<br />
{<br />
fprintf(pf, &quot;%s %d\n&quot;, name, age);<br />
}</p>
<p>int Person::scan(FILE *pf)<br />
{<br />
return fscanf(pf, &quot;%s%d&quot;, name, &amp;age); // age ohne Fehlerabfrage!<br />
}</p>
<p>int main(void)<br />
{<br />
Person father, mother, myself;</p>
<p>father.setName(&quot;Karl&quot;);<br />
father.setAge(55);<br />
mother.setName(&quot;Brigitte&quot;);<br />
mother.setAge(51);</p>
<p>printf(&quot;Bitte Vorname und Alter (durch Leerzeichen getrennt) eingeben: &quot;);<br />
myself.scan(stdin);</p>
<p>Person son;<br />
son = myself;<br />
son.setAge(2);</p>
<p>father.print(stdout);<br />
mother.print(stdout);<br />
myself.print(stdout);<br />
son.print(stdout);</p>
<p>return 0;<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090114</guid><dc:creator><![CDATA[Helene]]></dc:creator><pubDate>Sun, 02 Jul 2006 13:21:06 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage mit Zeiger on Sun, 02 Jul 2006 13:32:32 GMT]]></title><description><![CDATA[<p>Helene schrieb:</p>
<blockquote>
<p>DANKE!!!<br />
Noch eine Anmerkung: Wenn ich die Fkt mit father.setName(&quot;Karl&quot;) aufrufe, ist dann die 0te Stelle ein &quot; ?? Oder wann oder warum brauch ich diese Anführungszeichen?[/cpp]<br />
Die Anführungszeichen sagen dem Compiler, das nun kein Variablenname kommt sondern, ein Konstanter String. Wenn du sie weglassen würdest, würde der Compiler eine Variable namens Karl suchen (die er wahrscheinlich nicht findet). Die 0te stelle ist als K und die fünfte ist '\0'.</p>
<p>[cpp]Stell mich vielleicht etwas. Ich habe Microsoft Visual Studio 2005 und bei mir läuft folgendes Programm nicht. Woran liegt das bzw. was muss ich ändern. mit .Net hat es funktioniert.</p>
<p>#include &lt;iostream&gt;<br />
#include &lt;cstring&gt;<br />
using namespace std;</p>
<p>#define MAXNAMELENGTH 64<br />
class Person<br />
{<br />
char name[MAXNAMELENGTH + 1];<br />
int age;<br />
public:<br />
void setName(const char *pNam);<br />
void setAge(int ag);<br />
void print(FILE *pf) const;<br />
int scan(FILE *pf);<br />
};</p>
<p>void Person::setName(const char *pNam)<br />
{<br />
strcpy(name, pNam);<br />
}</p>
<p>void Person::setAge(int ag)<br />
{<br />
age = ag;<br />
}</p>
<p>void Person::print(FILE *pf) const<br />
{<br />
fprintf(pf, &quot;%s %d\n&quot;, name, age);<br />
}</p>
<p>int Person::scan(FILE *pf)<br />
{<br />
return fscanf(pf, &quot;%s%d&quot;, name, &amp;age); // age ohne Fehlerabfrage!<br />
}</p>
<p>int main(void)<br />
{<br />
Person father, mother, myself;</p>
<p>father.setName(&quot;Karl&quot;);<br />
father.setAge(55);<br />
mother.setName(&quot;Brigitte&quot;);<br />
mother.setAge(51);</p>
<p>printf(&quot;Bitte Vorname und Alter (durch Leerzeichen getrennt) eingeben: &quot;);<br />
myself.scan(stdin);</p>
<p>Person son;<br />
son = myself;<br />
son.setAge(2);</p>
<p>father.print(stdout);<br />
mother.print(stdout);<br />
myself.print(stdout);<br />
son.print(stdout);</p>
<p>return 0;<br />
}</p>
</blockquote>
<p>Fehlermeldung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090120</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Sun, 02 Jul 2006 13:32:32 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage mit Zeiger on Sun, 02 Jul 2006 13:48:53 GMT]]></title><description><![CDATA[<p>1&gt;------ Erstellen gestartet: Projekt: Person, Konfiguration: Debug Win32 ------<br />
1&gt;Kompilieren...<br />
1&gt;person.cpp<br />
1&gt;d:\studium_2006\me5_informatik_2b_jesorsky\visual_projekte\person\person\person.cpp(19) : warning C4996: 'strcpy' wurde als veraltet deklariert<br />
1&gt; c:\programme\microsoft visual studio 8\vc\include\string.h(73): Siehe Deklaration von 'strcpy'<br />
1&gt; Meldung: &quot;This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.&quot;<br />
1&gt;d:\studium_2006\me5_informatik_2b_jesorsky\visual_projekte\person\person\person.cpp(34) : warning C4996: 'fscanf' wurde als veraltet deklariert<br />
1&gt; c:\programme\microsoft visual studio 8\vc\include\stdio.h(249): Siehe Deklaration von 'fscanf'<br />
1&gt; Meldung: &quot;This function or variable may be unsafe. Consider using fscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.&quot;<br />
1&gt;Das Buildprotokoll wurde unter &quot;file://d:\STUDIUM_2006\ME5_INFORMATIK_2b_Jesorsky\Visual_Projekte\Person\Person\Debug\BuildLog.htm&quot; gespeichert.<br />
1&gt;Person - 0 Fehler, 2 Warnung(en)<br />
========== Erstellen: 1 erfolgreich, Fehler bei 0, 0 aktuell, 0 übersprungen ==========</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090134</guid><dc:creator><![CDATA[Helene]]></dc:creator><pubDate>Sun, 02 Jul 2006 13:48:53 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage mit Zeiger on Sun, 02 Jul 2006 13:51:13 GMT]]></title><description><![CDATA[<p>Noch eine Frage zur folgenden Funktion:</p>
<p>char *strcpy( char *dest, const char *src )<br />
{<br />
char *tmp = dest;<br />
while( (*dest++ = *src++) != '\0' ); // hier wird mittels Zeiger-Arithmetik der Inhalt kopiert<br />
return tmp;<br />
}</p>
<p>geht es nicht auch so:</p>
<p>char *strcpy( char *dest, const char *src )<br />
{<br />
while( (*dest++ = *src++) != '\0' );<br />
return dest;<br />
}</p>
<p>Für was brauch ich dieses tmp?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090135</guid><dc:creator><![CDATA[Helene]]></dc:creator><pubDate>Sun, 02 Jul 2006 13:51:13 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage mit Zeiger on Sun, 02 Jul 2006 14:01:05 GMT]]></title><description><![CDATA[<p>strcpy ist so definiert dass dest zurückgegeben wird. Da Du dest ja veränderst musst Du es irgendwo sichern. Dafür ist tmp.</p>
<p>Die Funktion die Du implementiert hast gibt es übrigens tatsächlich, und zwar als GNU-Erweiterung (natürlich dann nur mit GCC) und heisst stpcpy - sie liefert einen Zeiger auf das Ende von dest zurück <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/1090138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090138</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Sun, 02 Jul 2006 14:01:05 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage mit Zeiger on Sun, 02 Jul 2006 14:01:39 GMT]]></title><description><![CDATA[<blockquote>
<p>Erstellen: 1 erfolgreich</p>
</blockquote>
<p>Also gar kein Fehler? Was klappt denn nicht??</p>
<p>So ist es vielleicht klarer wozu du tmp brauchst:</p>
<pre><code class="language-cpp">char *strcpy( char *dest, const char *src )
{
  char *tmp = dest;
  while( (*tmp++ = *src++) != '\0' ); // hier wird mittels Zeiger-Arithmetik der Inhalt kopiert
  return dest;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1090139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090139</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Sun, 02 Jul 2006 14:01:39 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage mit Zeiger on Sun, 02 Jul 2006 14:04:24 GMT]]></title><description><![CDATA[<p>Helene schrieb:</p>
<blockquote>
<p>Noch eine Frage zur folgenden Funktion:</p>
<p>char *strcpy( char *dest, const char *src )<br />
{<br />
char *tmp = dest;<br />
while( (*dest++ = *src++) != '\0' ); // hier wird mittels Zeiger-Arithmetik der Inhalt kopiert<br />
return tmp;<br />
}</p>
<p>geht es nicht auch so:</p>
<p>char *strcpy( char *dest, const char *src )<br />
{<br />
while( (*dest++ = *src++) != '\0' );<br />
return dest;<br />
}</p>
<p>Für was brauch ich dieses tmp?</p>
</blockquote>
<p>Ich glaube das geht nicht, allerdings bin ich noch ein totaler anfänger.</p>
<p>tmp speichtert doch den Wert von dest vor der Whileschleife und gibt diesen zurück, bei dest wäre das ja der Wert nach der Schleife, ausserdem ist dest ein zeiger, das wird doch automatisch im hauptprogramm übernommen.</p>
<p>Bitte erschlagt mich nicht wen ich unsinn rede <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090142</guid><dc:creator><![CDATA[Muffin888]]></dc:creator><pubDate>Sun, 02 Jul 2006 14:04:24 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage mit Zeiger on Sun, 02 Jul 2006 15:07:33 GMT]]></title><description><![CDATA[<p>In temp speicherst Du die Anfangsadresse von dest (ziel), dest wird beim Kopieren laufend erhöht.<br />
Ist nun klar wozu temp gebraucht wird? <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/1090184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090184</guid><dc:creator><![CDATA[haase]]></dc:creator><pubDate>Sun, 02 Jul 2006 15:07:33 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage mit Zeiger on Sun, 02 Jul 2006 15:48:43 GMT]]></title><description><![CDATA[<p>das mit dem tmp zeiger habe ich verstanden.</p>
<p>(*dest++ = *src++) != '\0' )</p>
<p>wird das von der reihenfolge her so abgearbeitet?</p>
<p>1)*dest = *src;<br />
2)*src != '\0'<br />
3)scr++,dest++<br />
usw</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090210</guid><dc:creator><![CDATA[Helene]]></dc:creator><pubDate>Sun, 02 Jul 2006 15:48:43 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage mit Zeiger on Sun, 02 Jul 2006 16:16:03 GMT]]></title><description><![CDATA[<p>Noch ne Frage:</p>
<p>Zeigt der This-Zeiger bei dieser Fkt:</p>
<p>void Person::print(FILE *pf) const<br />
{<br />
fprintf(pf, &quot;%s %d\n&quot;, name, age);<br />
}</p>
<p>auf name, oder wie kann man das einfach erklären?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090227</guid><dc:creator><![CDATA[Helene]]></dc:creator><pubDate>Sun, 02 Jul 2006 16:16:03 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerfrage mit Zeiger on Sun, 02 Jul 2006 16:56:09 GMT]]></title><description><![CDATA[<p>Helene schrieb:</p>
<blockquote>
<p>das mit dem tmp zeiger habe ich verstanden.</p>
<p>(*dest++ = *src++) != '\0' )</p>
<p>wird das von der reihenfolge her so abgearbeitet?</p>
<p>1)*dest = *src;<br />
2)*src != '\0'<br />
3)scr++,dest++<br />
usw</p>
</blockquote>
<p>Ungefähr so:</p>
<ol>
<li>temp1 = dest</li>
<li>dest += 1</li>
<li>temp2 = src</li>
<li>src += 1</li>
<li>*temp1 = *temp2</li>
<li>Wenn *temp1 == '\0' -&gt; verlassen sonst -&gt; Punkt 1.</li>
</ol>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090250</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Sun, 02 Jul 2006 16:56:09 GMT</pubDate></item></channel></rss>