<?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[Negatives Argument für Substr]]></title><description><![CDATA[<pre><code class="language-cpp">string a = &quot;Hallo Echo!&quot;;
	string b = a.substr ( 0, -3 );
	cout &lt;&lt; b &lt;&lt; endl;
</code></pre>
<p>Ausgabe:</p>
<blockquote>
<p>Hallo Echo!</p>
</blockquote>
<p>Warum ist das so?<br />
Ist das so, weil -3 intern zu unsigned int wird, das Argument dadurch sehr groß wird und beim Kopieren nach <em>b</em> zusätzlich die Grenzen von <em>a</em> geprüft werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/243670/negatives-argument-für-substr</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 21:11:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/243670.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 19 Jun 2009 15:48:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Negatives Argument für Substr on Fri, 19 Jun 2009 15:48:09 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">string a = &quot;Hallo Echo!&quot;;
	string b = a.substr ( 0, -3 );
	cout &lt;&lt; b &lt;&lt; endl;
</code></pre>
<p>Ausgabe:</p>
<blockquote>
<p>Hallo Echo!</p>
</blockquote>
<p>Warum ist das so?<br />
Ist das so, weil -3 intern zu unsigned int wird, das Argument dadurch sehr groß wird und beim Kopieren nach <em>b</em> zusätzlich die Grenzen von <em>a</em> geprüft werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729602</guid><dc:creator><![CDATA[staun0r]]></dc:creator><pubDate>Fri, 19 Jun 2009 15:48:09 GMT</pubDate></item><item><title><![CDATA[Reply to Negatives Argument für Substr on Fri, 19 Jun 2009 16:00:05 GMT]]></title><description><![CDATA[<p>staun0r schrieb:</p>
<blockquote>
<p>Ist das so, weil -3 intern zu unsigned int wird, das Argument dadurch sehr groß wird und beim Kopieren nach <em>b</em> zusätzlich die Grenzen von <em>a</em> geprüft werden?</p>
</blockquote>
<p>Ich glaube, du meinst das richtig, aber drückst dich falsch aus.<br />
Das zweite Argument ( <code>n</code> ) von <code>std::string::substr</code> erwartet einen <code>std::size_t</code> . <code>std::size_t</code> ist ein vorzeichenloser Typ. Also wird aus -3 irgendeine grosse Zahl, welche das gleiche Bitmuster hat.<br />
In der Funktion werden dann alle Zeichen kopiert von <code>pos</code> (1. Argument) bis <code>pos + n</code> , falls <code>pos + n</code> grösser ist als die Länge des Strings dann einfach alle restlichen.</p>
<p>So funktioniert die Funktion schliesslich auch mit nur einem Argument. Der Standardwert des 2. Arguments ( <code>n</code> ) ist <code>std::string::npos</code> , was nichts anderes ist als der Rückgabewert von <code>std::numeric_limits&lt;std::size_t&gt;::max()</code> .</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729617</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 19 Jun 2009 16:00:05 GMT</pubDate></item></channel></rss>