<?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[string::resize]]></title><description><![CDATA[<p>hallo leute</p>
<p>unter VS2013 hab ich folgenden code verwendet:</p>
<pre><code>inline auto get_window_text(const window_handle &amp;h) noexcept -&gt; std::wstring
{
   std::size_t len = static_cast&lt;int&gt;(SendMessage(h.handle(), WM_GETTEXTLENGTH, 0, 0));
   std::wstring str;
   str.reserve(len + 1);
   SendMessage(h.handle(), WM_GETTEXT, (WPARAM)len + 1, (LPARAM)&amp;str[0]);
   str.resize(len); // (1)

   return str;
}
</code></pre>
<p>hier wird einfach nur die eingabe eines edit-controls in einen string kopiert.<br />
unter VS2015 funktioniert der code nicht mehr so wie er soll.<br />
in der zeile (1) wird der string mit '\0' ueberschrieben. warum ?<br />
ich war der meinung das ich dem string mit resize sage, wie lange er ist. scheinbar lieg ich da falsch</p>
<p>im grund muss ich folgendes machen:<br />
(<em>) textlaenge abfragen = len<br />
(</em>) speicher im string reservieren: len + 1 // + 1 fuer abschliesendes '\0'<br />
(<em>) das control kopiert den text in den string ab adresse &amp;str[0]<br />
(</em>) ich muss dem string sagen das der inhalt len zeichen lang ist // machte ich bisher mit resize</p>
<p>wie macht man es richtig ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/334452/string-resize</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Apr 2026 15:01:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/334452.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 14 Sep 2015 22:00:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to string::resize on Mon, 14 Sep 2015 22:00:22 GMT]]></title><description><![CDATA[<p>hallo leute</p>
<p>unter VS2013 hab ich folgenden code verwendet:</p>
<pre><code>inline auto get_window_text(const window_handle &amp;h) noexcept -&gt; std::wstring
{
   std::size_t len = static_cast&lt;int&gt;(SendMessage(h.handle(), WM_GETTEXTLENGTH, 0, 0));
   std::wstring str;
   str.reserve(len + 1);
   SendMessage(h.handle(), WM_GETTEXT, (WPARAM)len + 1, (LPARAM)&amp;str[0]);
   str.resize(len); // (1)

   return str;
}
</code></pre>
<p>hier wird einfach nur die eingabe eines edit-controls in einen string kopiert.<br />
unter VS2015 funktioniert der code nicht mehr so wie er soll.<br />
in der zeile (1) wird der string mit '\0' ueberschrieben. warum ?<br />
ich war der meinung das ich dem string mit resize sage, wie lange er ist. scheinbar lieg ich da falsch</p>
<p>im grund muss ich folgendes machen:<br />
(<em>) textlaenge abfragen = len<br />
(</em>) speicher im string reservieren: len + 1 // + 1 fuer abschliesendes '\0'<br />
(<em>) das control kopiert den text in den string ab adresse &amp;str[0]<br />
(</em>) ich muss dem string sagen das der inhalt len zeichen lang ist // machte ich bisher mit resize</p>
<p>wie macht man es richtig ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2468013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2468013</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Mon, 14 Sep 2015 22:00:22 GMT</pubDate></item><item><title><![CDATA[Reply to string::resize on Mon, 14 Sep 2015 22:21:26 GMT]]></title><description><![CDATA[<p>resize statt reserve sollte gehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2468015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2468015</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 14 Sep 2015 22:21:26 GMT</pubDate></item><item><title><![CDATA[Reply to string::resize on Mon, 14 Sep 2015 22:25:19 GMT]]></title><description><![CDATA[<p>danke funktioniert. aber warum ?<br />
weshalb muss ich jetzt meinen source aendern?<br />
was habe ich an reserve missverstanden ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2468016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2468016</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Mon, 14 Sep 2015 22:25:19 GMT</pubDate></item><item><title><![CDATA[Reply to string::resize on Tue, 15 Sep 2015 06:04:55 GMT]]></title><description><![CDATA[<p>reserve verändert die Kapazität des strings. Falls du schon weißt, dass du in nächster Zeit ständig die Größe des Strings verändern wirst, zum Beispiel durch re<strong>size</strong> oder append oder ähnliches, muss nicht jedes mal neu Speicher angefordert werden (sofern sich der string vergrößert). Du würdest hier eine große Kapazität anfordern. Diese ist sozusagen die potentielle Größe des strings, die tatsächliche wird über size() wiedergegeben und unter anderem über resize gesetzt.<br />
Du kannst dir reserve als Hinweis für die Speicherverwaltung des strings vorstellen. Aber auch, wenn der Speicher da ist, darfst du da trotzdem nicht einfach reinschreiben. Das überwacht der string.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2468028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2468028</guid><dc:creator><![CDATA[Hyde++ 0]]></dc:creator><pubDate>Tue, 15 Sep 2015 06:04:55 GMT</pubDate></item><item><title><![CDATA[Reply to string::resize on Tue, 15 Sep 2015 07:51:52 GMT]]></title><description><![CDATA[<p>Meep Meep schrieb:</p>
<blockquote>
<p>danke funktioniert. aber warum ?</p>
</blockquote>
<p>Hast du dir die Doku zu resize mal durchgelesen?</p>
<p>Meep Meep schrieb:</p>
<blockquote>
<p>weshalb muss ich jetzt meinen source aendern?</p>
</blockquote>
<p>Weil er Fehler enthält?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2468040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2468040</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 15 Sep 2015 07:51:52 GMT</pubDate></item><item><title><![CDATA[Reply to string::resize on Tue, 15 Sep 2015 09:13:00 GMT]]></title><description><![CDATA[<p>Auf den &quot;reservten&quot; darfst du nicht zugreifen, nur auf den &quot;resizten&quot;. Der SendMessage Aufruf macht daher Unsinn.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2468063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2468063</guid><dc:creator><![CDATA[TGGC]]></dc:creator><pubDate>Tue, 15 Sep 2015 09:13:00 GMT</pubDate></item><item><title><![CDATA[Reply to string::resize on Tue, 15 Sep 2015 09:13:01 GMT]]></title><description><![CDATA[<p>Auf den &quot;reservten&quot; darfst du nicht zugreifen, nur auf den &quot;resizten&quot;. Der SendMessage Aufruf macht daher Unsinn.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2468062</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2468062</guid><dc:creator><![CDATA[TGGC]]></dc:creator><pubDate>Tue, 15 Sep 2015 09:13:01 GMT</pubDate></item><item><title><![CDATA[Reply to string::resize on Tue, 15 Sep 2015 11:16:22 GMT]]></title><description><![CDATA[<p>also wenn ich das richtig verstanden habe, ist folgendes abgelaufen:<br />
mit reserve hab ich speicher geholt. den ich aber noch nicht beutzen durfte, weil ich mit resize noch keine groesse vereinbart hatte.<br />
nach dem ich in den reservierten speicher geschrieben hatte hat resize den speicher erstmals initialisiert und dadurch den kopierten inhalt mit '\0' ueberschrieben.</p>
<p>nachdem das mit VS2013 noch nicht passiert ist, hat resize in 2013 den speicher nicht mit '\0' initialisiert.</p>
<p>gibt es eine moeglichkeit resize das initialisieren zu verbieten ? sonst wird der speicher ja doppelt beschrieben. einmal mit '\0' und dann mit meinem textinhalt.</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2468071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2468071</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Tue, 15 Sep 2015 11:16:22 GMT</pubDate></item><item><title><![CDATA[Reply to string::resize on Tue, 15 Sep 2015 11:48:18 GMT]]></title><description><![CDATA[<p>Meep Meep schrieb:</p>
<blockquote>
<p>gibt es eine moeglichkeit resize das initialisieren zu verbieten ? sonst wird der speicher ja doppelt beschrieben. einmal mit '\0' und dann mit meinem textinhalt.</p>
</blockquote>
<p>Irgendeinen Tod musst Du sterben...<br />
Aber nimm doch gleich einen <a href="http://en.cppreference.com/w/cpp/string/basic_string/basic_string" rel="nofollow">passenden C'tor von std::string</a> und verzichte auf <code>resize()</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2468073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2468073</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Tue, 15 Sep 2015 11:48:18 GMT</pubDate></item></channel></rss>