<?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[Vector]]></title><description><![CDATA[<p>Hallo, ist das richtig sowie ich den Vector hier in der Funktion benutze ?<br />
Der Vector kann hier nicht Überlaufen (Bufferoverflow) richtig ?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std;

int function (char * );
int main(int argc, char* argv[])
{

vector&lt;char&gt;var(1);

cout&lt;&lt;&quot;Eingabe: &quot;;
cin.getline(&amp;var[0] , 100 );

function ( &amp;var[0] );

system(&quot;PAUSE&quot;);
}
//---------------------------------------------------------------------------

int function (char *s )
{
        cout&lt;&lt;&quot;Ausgabe aus Vector: &quot; &lt;&lt; s &lt;&lt;endl &lt;&lt;endl;

return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/291876/vector</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 13:03:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/291876.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 29 Aug 2011 08:47:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vector on Mon, 29 Aug 2011 08:47:26 GMT]]></title><description><![CDATA[<p>Hallo, ist das richtig sowie ich den Vector hier in der Funktion benutze ?<br />
Der Vector kann hier nicht Überlaufen (Bufferoverflow) richtig ?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std;

int function (char * );
int main(int argc, char* argv[])
{

vector&lt;char&gt;var(1);

cout&lt;&lt;&quot;Eingabe: &quot;;
cin.getline(&amp;var[0] , 100 );

function ( &amp;var[0] );

system(&quot;PAUSE&quot;);
}
//---------------------------------------------------------------------------

int function (char *s )
{
        cout&lt;&lt;&quot;Ausgabe aus Vector: &quot; &lt;&lt; s &lt;&lt;endl &lt;&lt;endl;

return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2111910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111910</guid><dc:creator><![CDATA[memo ry]]></dc:creator><pubDate>Mon, 29 Aug 2011 08:47:26 GMT</pubDate></item><item><title><![CDATA[Reply to Vector on Mon, 29 Aug 2011 08:50:54 GMT]]></title><description><![CDATA[<p>Deine Verwendung ist komplett falsch. Also so richtig. Falscher als falsch. Woher soll denn der std::vector wissen, dass du 100 Byte einlesen willst?</p>
<p>Was du hier machst ist grob undefiniertes Verhalten. Außerdem ist deine Art des Einlesens fragwürdig. Die Diskussionen über endl und system() will ich erst gar nicht anfangen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111911</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 29 Aug 2011 08:50:54 GMT</pubDate></item><item><title><![CDATA[Reply to Vector on Mon, 29 Aug 2011 08:54:45 GMT]]></title><description><![CDATA[<p>ein bufferoverflow ist wenn der zahlenbereich eines datentyps nicht ausreichend für deine zahlen ist. sprich wenn du versuchst z.b. 12633274234 n 8bit (max 255) zu quetschen...</p>
<p>was du hier machst, ist was anderes. du sprichst vermutlich von array indexierungen und den damit verbundenen fehlern wie ausserhalb eines arrays schreiben und lesen.<br />
der vector gibt dir ein paar hilfen damit sowas nicht oder nur schwer passiert und man es dann doch findet.</p>
<p>aber genau das umgehst du alles schön indem du mit zeigern rummischst...</p>
<p>und in deinem beispiel kracht es sofort:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std;

int function (char * );
int main(int argc, char* argv[])
{

vector&lt;char&gt;var(1); // du reservierst speicher für einen char, nicht für 100 wie du gleich brauchen könntest

cout&lt;&lt;&quot;Eingabe: &quot;;
cin.getline(&amp;var[0] , 100 ); // hier wird es sofort krachen, da eben zu wenig speicher bereitgestellt ist

function ( &amp;var[0] ); // hier greifst du auf interne member des vectors zu, wenn du das jetzt deletes krachts später wieder. lass das mal alles sorge des vectors sein

system(&quot;PAUSE&quot;);
}
//---------------------------------------------------------------------------
int function (char *s )
{
        cout&lt;&lt;&quot;Ausgabe aus Vector: &quot; &lt;&lt; s &lt;&lt;endl &lt;&lt;endl; // du willst hier einenchar* string ausgeben. cout erwartet aber, dass solch ein char* string mit einer 0 terminiert ist. und das ist es beim vector nicht...

return 0;
}
</code></pre>
<p>es gibt eine einfache lösung:<br />
1.- nimm std::string<br />
2.- nimm getline(cin, std::string)<br />
3.- lass den pointerscheiss wech</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111916</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Mon, 29 Aug 2011 08:54:45 GMT</pubDate></item><item><title><![CDATA[Reply to Vector on Mon, 29 Aug 2011 09:08:27 GMT]]></title><description><![CDATA[<p>Also abgestürtzt ist das Programm bei mir nicht.</p>
<p>Aber wie macht man es denn dann richtig mit dem Vector, ich weiss das ich std::string benutzen kann aber mich interessiert der Vector kram auch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111921</guid><dc:creator><![CDATA[memo ry]]></dc:creator><pubDate>Mon, 29 Aug 2011 09:08:27 GMT</pubDate></item><item><title><![CDATA[Reply to Vector on Mon, 29 Aug 2011 09:11:15 GMT]]></title><description><![CDATA[<p>memo ry schrieb:</p>
<blockquote>
<p>Aber wie macht man es denn dann richtig mit dem Vector</p>
</blockquote>
<p>Indem man ihn für die Dinge benutzt, für die er geeignet und gedacht ist. Für chars ist nunmal std::string in den meisten Fällen der bessere Kandidat.</p>
<p>Was willst du überhaupt erreichen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111923</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 29 Aug 2011 09:11:15 GMT</pubDate></item><item><title><![CDATA[Reply to Vector on Mon, 29 Aug 2011 09:11:28 GMT]]></title><description><![CDATA[<p>Reines Glück - undefiniertes Verhalten eben.<br />
Wenn du was mit vector üben willst, dann bitte was sinnvolles. Lies 10 Zahlen ein und berechne die Summe oder so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111924</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 29 Aug 2011 09:11:28 GMT</pubDate></item><item><title><![CDATA[Reply to Vector on Mon, 29 Aug 2011 09:17:39 GMT]]></title><description><![CDATA[<p>Wenn du unbedingt einen vector&lt;&gt; verwenden willst, dann laufen solche Spielereien unter &quot;auf eigene Gefahr&quot;. Der Zugriff auf den Vector-Inhalt über einen nackten Zeiger (&amp;v[0] bzw. &amp;v.front()) umgeht dessen eigene Speicherverwaltung, da mußt du vorher genug Platz zur Verfügung gestellt haben. Und auch wenn du es geschafft hast, 100 Zeichen in den Speicher zu beamen, geht der vector&lt;&gt; immer noch davon aus, daß er nur ein Element enthält - möglicherweise hat er <s>prophilaktisch</s> vorsorglich mehr Platz reserviert, aber bei der Größe hast du ziemlich sicher den verfügbaren Platz überstrapaziert. Das Resultat muß nicht unbedingt sofort zum Absturz führen, sondern liefert mitunter subtilere Fehler, die erst dann bemerkbar werden, wenn du den Code in einen größeren Kontext setzt.</p>
<p>PS: Ich schließe mich Skym0sh0 an - verwende für jedes Problem das richtige Werkzeug. Und vector&lt;char&gt; ist nunmal keie vollwertige String-Klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111929</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111929</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 29 Aug 2011 09:17:39 GMT</pubDate></item><item><title><![CDATA[Reply to Vector on Mon, 29 Aug 2011 09:42:39 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>ein bufferoverflow ist wenn der zahlenbereich eines datentyps nicht ausreichend für deine zahlen ist. sprich wenn du versuchst z.b. 12633274234 n 8bit (max 255) zu quetschen...</p>
</blockquote>
<p>Das ist ein Integer-Overflow. Hier ist es ein Bufferoverflow, da ein Buffer (das Array) über die Grenzen hinaus beschrieben wird.</p>
<p>Zum Thema: wie man es mit <code>vector</code> machen <em>könnte</em>:</p>
<pre><code class="language-cpp">vector&lt;char&gt; v;
char c;
while(cin &gt;&gt; c &amp;&amp; c != '\n')
    v.push_back(c);
</code></pre>
<p><code>std::getline</code> macht genau das selbe, nur vermutlich effizienter und mit <code>string</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111939</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111939</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Mon, 29 Aug 2011 09:42:39 GMT</pubDate></item></channel></rss>