<?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[C-String Funktionen in C++ -&amp;gt; Verständnisschwierigkeiten bei Nutzung]]></title><description><![CDATA[<p>Hallo Leute<br />
ich wünsche euch erstmal ein frohes Neues Jahr!!</p>
<p>Gestern Abend habe ich das Thema &quot;C-Strings Bibliotheksfunktionen&quot; durchgearbeitet und bei einem Beispielprogramm dass der Autor geliefert hat bekam ich Verständnisschwierigkeiten, da in dem Buch die Codezeile die als wichtig bezeichnet wurde mangelhaft erklärt wurde. Zumindest finde ich das so...^^<br />
Hier vorsichtshalber die wichtigsten Teile des Quellcodes(Die Problemzeile habe ich absichtlich mit nem Kommentar hervorgehoben):</p>
<pre><code class="language-cpp">char name[60];
char vname[30];
char nname[30];

cin.getline(vname, sizeof(vname));
cin.getline(nname, sizeof(nname));

strncpy(name, vname, sizeof(name) - 1);
strncat(name, &quot; &quot;, 1);
strncat(name, nname, sizeof(name) - strlen(name) - 1); // Das Verständnisproblem bei mir liegt im 3. Parameter
name[sizeof(name) - 1] = '\0';
</code></pre>
<p>Also ich habe den dritten Parameter nicht genau Verstanden, was der bezwecken soll... Aus meiner Sicht wird alles was vor dem String liegt(also bis zum Terminierungszeichen) vom gesamten Char Array abgezogen. Und dann nochmal 1 subtrahieren? Ich könnte mir vorstellen, dass mit dem -1 Platz für das Terminierungszeichen geschaffen wurde?</p>
<p>Gruß aikiguy91</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/230746/c-string-funktionen-in-c-gt-verständnisschwierigkeiten-bei-nutzung</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 06:24:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/230746.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 01 Jan 2009 08:18:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C-String Funktionen in C++ -&amp;gt; Verständnisschwierigkeiten bei Nutzung on Thu, 01 Jan 2009 08:18:12 GMT]]></title><description><![CDATA[<p>Hallo Leute<br />
ich wünsche euch erstmal ein frohes Neues Jahr!!</p>
<p>Gestern Abend habe ich das Thema &quot;C-Strings Bibliotheksfunktionen&quot; durchgearbeitet und bei einem Beispielprogramm dass der Autor geliefert hat bekam ich Verständnisschwierigkeiten, da in dem Buch die Codezeile die als wichtig bezeichnet wurde mangelhaft erklärt wurde. Zumindest finde ich das so...^^<br />
Hier vorsichtshalber die wichtigsten Teile des Quellcodes(Die Problemzeile habe ich absichtlich mit nem Kommentar hervorgehoben):</p>
<pre><code class="language-cpp">char name[60];
char vname[30];
char nname[30];

cin.getline(vname, sizeof(vname));
cin.getline(nname, sizeof(nname));

strncpy(name, vname, sizeof(name) - 1);
strncat(name, &quot; &quot;, 1);
strncat(name, nname, sizeof(name) - strlen(name) - 1); // Das Verständnisproblem bei mir liegt im 3. Parameter
name[sizeof(name) - 1] = '\0';
</code></pre>
<p>Also ich habe den dritten Parameter nicht genau Verstanden, was der bezwecken soll... Aus meiner Sicht wird alles was vor dem String liegt(also bis zum Terminierungszeichen) vom gesamten Char Array abgezogen. Und dann nochmal 1 subtrahieren? Ich könnte mir vorstellen, dass mit dem -1 Platz für das Terminierungszeichen geschaffen wurde?</p>
<p>Gruß aikiguy91</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637915</guid><dc:creator><![CDATA[aikiguy91]]></dc:creator><pubDate>Thu, 01 Jan 2009 08:18:12 GMT</pubDate></item><item><title><![CDATA[Reply to C-String Funktionen in C++ -&amp;gt; Verständnisschwierigkeiten bei Nutzung on Thu, 01 Jan 2009 09:29:53 GMT]]></title><description><![CDATA[<p>In name haben noch 60 (sizeof(name)) - &quot;was schon drin ist&quot;(strlen(name)) - 1 (Terminierungszeichen)zeichen platz.</p>
<p>So und ab jetzt nimmt mal besser std::string oder eine bessere String Klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637919</guid><dc:creator><![CDATA[badrüdisucks]]></dc:creator><pubDate>Thu, 01 Jan 2009 09:29:53 GMT</pubDate></item><item><title><![CDATA[Reply to C-String Funktionen in C++ -&amp;gt; Verständnisschwierigkeiten bei Nutzung on Thu, 01 Jan 2009 09:35:06 GMT]]></title><description><![CDATA[<p>Ich denke das hilft mir weiter, danke für deine Hilfe.</p>
<p>Ähm, soll ich etwa die Kapitel des Buches mit C-Strings ignorieren?? <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1637920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637920</guid><dc:creator><![CDATA[aikiguy91]]></dc:creator><pubDate>Thu, 01 Jan 2009 09:35:06 GMT</pubDate></item><item><title><![CDATA[Reply to C-String Funktionen in C++ -&amp;gt; Verständnisschwierigkeiten bei Nutzung on Thu, 01 Jan 2009 11:35:29 GMT]]></title><description><![CDATA[<p>JA das solltest du machen <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="😃"
    /> Wenn du C++ lernen willst, warum befasst du dich mit C?:D</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637939</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637939</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Thu, 01 Jan 2009 11:35:29 GMT</pubDate></item><item><title><![CDATA[Reply to C-String Funktionen in C++ -&amp;gt; Verständnisschwierigkeiten bei Nutzung on Thu, 01 Jan 2009 12:27:39 GMT]]></title><description><![CDATA[<p>Ja, ich finde es selbst ein wenig merkwürdig, aber das hier steht im Buch:</p>
<p>Buch: C++ von A bis Z schrieb:</p>
<blockquote>
<p>C-Programmierer sind mit den klassischen C-Strings bestens vertraut. Allerdings verwendet man bei modernen C++-Programmen keine C-Strings mehr, sondern die C++-Klasse &gt;&gt;string&lt;&lt;. Wozu also &gt;&gt;alte Geister&lt;&lt; aufwecken, werden Sie sich fragen? Der Hauptgrund ist, dass viele C-Programme mittlerweile in C++-Programme umgeschrieben wurden, und dabei wurde die Verwendung von C-Strings häufig beibehalten, sofern die Ausführungsgeschwindigkeit eine Rolle spielen sollte, sind die C-Strings erheblich effizienter in ihrer Ausführung, da hier der Verwaltungsaufwand geringer ist.</p>
</blockquote>
<p>Mag zwar sein, dass es nicht viel Sinn macht C-Strings zu behandeln, aber ich wollte im Buch jetzt soweit wie möglich nichts auslassen. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1637949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637949</guid><dc:creator><![CDATA[aikiguy91]]></dc:creator><pubDate>Thu, 01 Jan 2009 12:27:39 GMT</pubDate></item><item><title><![CDATA[Reply to C-String Funktionen in C++ -&amp;gt; Verständnisschwierigkeiten bei Nutzung on Thu, 01 Jan 2009 12:52:30 GMT]]></title><description><![CDATA[<p>Das ist jetzt eine persönliche Meinung, aber schmeiss das Buch weg. Bisher gab es eher schlechte Erfahrungen mit dem Buch.<br />
Die Begründung in diesem Abschnitt ist zudem sehr zweifelhaft.</p>
<p>Bei der Übergabe benutzt man in C++ oft <code>std::string const&amp;</code> . Also eine konstante Referenz auf das Objekt. Das kann der Kompiler meistens sehr effizient optimieren. Also kein Geschwindigkeitsverlust.<br />
Wenn eine Kopie übergeben werden soll, dann musst du in C oft zuerst die Länge ermitteln, um einen entsprechenden Puffer zu erzeugen und erst dann kannst du kopieren. In C++ ist die Grösse schon bekannt, die Kopie kann somit sofort ausgeführt werden.<br />
Oder auch das anfügen von Zeichen an einen String. In C musst du dich da mit <code>realloc</code> rumhauen und hoffen, dass dein Block nicht neu angelegt werden muss. Eine gute <code>std::string</code> Implementation, hat bereits genügend Speicher im voraus angefordert, wodurch das anfügen sofort passiert.<br />
Zudem ist die Handhabung von C++ Strings deutlich einfacher.</p>
<p>Mich würde also dieser Geschwindigkeitsverlust mal interessieren. Ich bin mir ziemlich sicher, dass er entweder kaum oder sogar gar nicht vorhanden ist. Die Argumentation erscheint mir daher ziemlich unüberlegt.<br />
Vor allem wenn man dann noch bedenkt, was dies für ein Aufwand bedeutet, diese C-Strings weiter zu unterhalten, das kann sich doch nicht lohnen?</p>
<p>Es ist sicher sinnvoll, wenn man sich auch mal mit den C-Strings beschäftigt. Aber das ist eher ein Thema, dass man als Appendix hinzufügen kann. Oder dann bei den Zeigern, allerdings würde ich auch die Zeiger etwas nach hinten im Buch verschieben, da man in C++ oft um die Zeiger herumkommt.</p>
<p>In diesem Forum, werden meistens die folgenden zwei Bücher empfohlen:</p>
<ul>
<li>C++ Primer</li>
<li>Thinking in C++ 1&amp;2 (Auch als Download erhältlich)</li>
</ul>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637956</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 01 Jan 2009 12:52:30 GMT</pubDate></item></channel></rss>