<?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++ Primer Aufgabe 4.31]]></title><description><![CDATA[<blockquote>
<p>Schreiben Sie ein Programm, das einen String von der Standardeingabe in ein Zeichenarry einliest. Beschreiben Sie, wie es Eingaben unterschiedlicher Größe handhabt. Testen Sie es, indem Sie ihm einen String mit Daten übergeben, der länger ist als das zugewiesene Array.</p>
</blockquote>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

int main()
{
    string buffer;
    getline(cin, buffer);
    char *c_string = new char[buffer.size() + 1];
    strcpy(c_string,buffer.c_str()); 
    c_string[buffer.size()] = '\0'; //Unnötig? Macht dass strcpy automatisch?
    cout &lt;&lt; c_string &lt;&lt; endl;

    return 0;
}
</code></pre>
<p>Eure Meinung? Ich hab die Aufgabenstellung jetzt net so ganz verstanden.</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/233718/c-primer-aufgabe-4-31</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 20:37:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/233718.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 08 Feb 2009 10:27:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++ Primer Aufgabe 4.31 on Sun, 08 Feb 2009 10:27:32 GMT]]></title><description><![CDATA[<blockquote>
<p>Schreiben Sie ein Programm, das einen String von der Standardeingabe in ein Zeichenarry einliest. Beschreiben Sie, wie es Eingaben unterschiedlicher Größe handhabt. Testen Sie es, indem Sie ihm einen String mit Daten übergeben, der länger ist als das zugewiesene Array.</p>
</blockquote>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

int main()
{
    string buffer;
    getline(cin, buffer);
    char *c_string = new char[buffer.size() + 1];
    strcpy(c_string,buffer.c_str()); 
    c_string[buffer.size()] = '\0'; //Unnötig? Macht dass strcpy automatisch?
    cout &lt;&lt; c_string &lt;&lt; endl;

    return 0;
}
</code></pre>
<p>Eure Meinung? Ich hab die Aufgabenstellung jetzt net so ganz verstanden.</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1659851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1659851</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sun, 08 Feb 2009 10:27:32 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Primer Aufgabe 4.31 on Sun, 08 Feb 2009 10:37:51 GMT]]></title><description><![CDATA[<p>Meinst du nicht, du solltest direkt einen C-String einlesen, also nicht über den Umweg <code>std::string</code> ?</p>
<p>Und ja, <code>strcpy()</code> hängt automatisch eine Nullterminierung an. Sowas könnte man auch auf <a href="http://www.cplusplus.com" rel="nofollow">www.cplusplus.com</a> nachlesen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1659855</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1659855</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 08 Feb 2009 10:37:51 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Primer Aufgabe 4.31 on Sun, 08 Feb 2009 10:59:23 GMT]]></title><description><![CDATA[<p>Ich denke mal, dass da auf Buffer Overflows angespielt wird.</p>
<pre><code class="language-cpp">char buffer[32];
std::cin &gt;&gt; buffer;
</code></pre>
<p>Und dann schau mal, was passiert, wenn du etwas längeres, als 32 Zeichen eingibst..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1659871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1659871</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 08 Feb 2009 10:59:23 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Primer Aufgabe 4.31 on Sun, 08 Feb 2009 11:13:46 GMT]]></title><description><![CDATA[<p>Die Aufgabe finde ich aber nicht so gut. Ich denke, so schnell findet man nicht heraus, dass da undefiniertes Verhalten im Spiel ist, wenn man davon nie gehört hat...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1659883</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1659883</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 08 Feb 2009 11:13:46 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Primer Aufgabe 4.31 on Sun, 08 Feb 2009 11:24:46 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Die Aufgabe finde ich aber nicht so gut. Ich denke, so schnell findet man nicht heraus, dass da undefiniertes Verhalten im Spiel ist, wenn man davon nie gehört hat...</p>
</blockquote>
<p>Darum geht es ja. <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="😉"
    /> - Normalerweise bekommt man eine Fehlermeldung, dass ausserhalb von gültigem Bereich zugegriffen wurde.<br />
Auch wenn das direkt nicht viel bringt nützt es bestimmt, wenn man irgendwann den gleichen Fehler bekommt und keine Ahung hat, wie der geschehen ist. Dann weiss man wenigstens, dass es um etwas solchiges (oder zumindest ähnliches) geht..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1659888</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1659888</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 08 Feb 2009 11:24:46 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Primer Aufgabe 4.31 on Sun, 08 Feb 2009 11:37:45 GMT]]></title><description><![CDATA[<p>Das ist es ja, was ich bezweifle. Sagen wir, man probiert es fünf Mal aus, erhält jedes Mal eine Speicherzugriffsverletzung. Dann arbeitet man an einem grösseren Projekt, schreibt über Arraygrenzen und richtet damit Schlimmeres an, zum Beispiel andere Daten oder sogar Rücksprungadressen überschreiben. Aber man denkt jetzt: &quot;Nein, Array-Überlauf kann nicht sein, das würde ja eine Zugriffsverletzung geben&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1659893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1659893</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 08 Feb 2009 11:37:45 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Primer Aufgabe 4.31 on Sun, 08 Feb 2009 11:40:22 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Das ist es ja, was ich bezweifle. Sagen wir, man probiert es fünf Mal aus, erhält jedes Mal eine Speicherzugriffsverletzung. Dann arbeitet man an einem grösseren Projekt, schreibt über Arraygrenzen und richtet damit Schlimmeres an, zum Beispiel andere Daten oder sogar Rücksprungadressen überschreiben. Aber man denkt jetzt: &quot;Nein, Array-Überlauf kann nicht sein, das würde ja eine Zugriffsverletzung geben&quot;.</p>
</blockquote>
<p>Ich glaube kaum, dass eine Rücksprungadresse zufällig mit einer gültigen Addresse überschrieben wird. <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="😉"
    /> - Das wäre wie ein 6er im Lotto.</p>
<p>Ansonsten macht man solche Eingaben auch nicht in einen festen Puffer. Da wäre das mit std::string bei weitem besser..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1659898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1659898</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 08 Feb 2009 11:40:22 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Primer Aufgabe 4.31 on Sun, 08 Feb 2009 11:48:34 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Ich glaube kaum, dass eine Rücksprungadresse zufällig mit einer gültigen Addresse überschrieben wird. <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="😉"
    /> - Das wäre wie ein 6er im Lotto.</p>
</blockquote>
<p>Es muss ja keine gültige Adresse sein. Aber ausschliessen darf man es nie... :p</p>
<p>drakon schrieb:</p>
<blockquote>
<p>Ansonsten macht man solche Eingaben auch nicht in einen festen Puffer. Da wäre das mit std::string bei weitem besser..</p>
</blockquote>
<p>Ja, das ist klar. Aber ich finde das eben grundsätzlich keine gute Aufgabe.</p>
<p>Viele Dinge kann man in C++ durch Ausprobieren herausfinden. Aber Operationen, die undefiniertes Verhalten verursachen, gehören eben nicht dazu. Da sollte einem lieber gesagt werden, dass das Verhalten undefiniert ist, und eben je nachdem alles bestens gehen kann, oder ein schwarzes Mini-Loch entsteht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1659903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1659903</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 08 Feb 2009 11:48:34 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Primer Aufgabe 4.31 on Sun, 08 Feb 2009 12:17:52 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Viele Dinge kann man in C++ durch Ausprobieren herausfinden. Aber Operationen, die undefiniertes Verhalten verursachen, gehören eben nicht dazu. Da sollte einem lieber gesagt werden, dass das Verhalten undefiniert ist, und eben je nachdem alles bestens gehen kann, oder ein schwarzes Mini-Loch entsteht.</p>
</blockquote>
<p>Ich kenne das Buch nicht und gehe eigentlich schwer davon aus, dass die Problematik danach angesprochen wird.. Sonst macht das ganze ja auch nicht viel Sinn.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1659910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1659910</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 08 Feb 2009 12:17:52 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Primer Aufgabe 4.31 on Sun, 08 Feb 2009 13:02:04 GMT]]></title><description><![CDATA[<p>Das geht aber komischerweise:</p>
<pre><code class="language-cpp">int main()
{
    char a[5];
    cin &gt;&gt; a; //Eingabe: Blaumilchkanal
    cout &lt;&lt; a &lt;&lt; endl;

    return 0;
}
</code></pre>
<p>Verstehe nicht warum?</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1659930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1659930</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sun, 08 Feb 2009 13:02:04 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Primer Aufgabe 4.31 on Sun, 08 Feb 2009 13:05:36 GMT]]></title><description><![CDATA[<p>Stromberg schrieb:</p>
<blockquote>
<p>Verstehe nicht warum?</p>
</blockquote>
<p>Eben, weil das Verhalten undefiniert ist. Es kann funktionieren, muss aber nicht. <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/1659931</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1659931</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 08 Feb 2009 13:05:36 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Primer Aufgabe 4.31 on Sun, 08 Feb 2009 13:09:25 GMT]]></title><description><![CDATA[<p>Okay, gecheckt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1659933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1659933</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sun, 08 Feb 2009 13:09:25 GMT</pubDate></item></channel></rss>