<?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[wchat_t array initialisiert größer als es sollte]]></title><description><![CDATA[<p>Hallo,</p>
<p>habe folgendes Problem:</p>
<pre><code class="language-cpp">wchar_t * text1 = new wchar_t[lineBreakPoint];
</code></pre>
<p>lineBreakPoint hat den Wert 23(in einem konkreten Fall). Die Länge des Arrays, also der Wert von wcslen(text1) beträgt aber 31.</p>
<p>Jetzt ist das Array größer, als ich es haben will. Problematisch ist es, wenn ich über dieses Array iteriere von Anfang bis Ende - denn dann sind die letzten Zeichen eben irgendwas, weil ich ja nur die ersten 23 Zeichen befülle.</p>
<p>Auch komisch ist, wenn ich z.B zum LinkBreakPoint 11 dazu addiere, wird das Array nur um 8 größer...<br />
Wie kann ich die größe dieses Arrays gezielt steuern?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/300502/wchat_t-array-initialisiert-größer-als-es-sollte</link><generator>RSS for Node</generator><lastBuildDate>Wed, 12 Aug 2026 18:28:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/300502.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 04 Mar 2012 16:13:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to wchat_t array initialisiert größer als es sollte on Sun, 04 Mar 2012 16:13:04 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>habe folgendes Problem:</p>
<pre><code class="language-cpp">wchar_t * text1 = new wchar_t[lineBreakPoint];
</code></pre>
<p>lineBreakPoint hat den Wert 23(in einem konkreten Fall). Die Länge des Arrays, also der Wert von wcslen(text1) beträgt aber 31.</p>
<p>Jetzt ist das Array größer, als ich es haben will. Problematisch ist es, wenn ich über dieses Array iteriere von Anfang bis Ende - denn dann sind die letzten Zeichen eben irgendwas, weil ich ja nur die ersten 23 Zeichen befülle.</p>
<p>Auch komisch ist, wenn ich z.B zum LinkBreakPoint 11 dazu addiere, wird das Array nur um 8 größer...<br />
Wie kann ich die größe dieses Arrays gezielt steuern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2188373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2188373</guid><dc:creator><![CDATA[stb01]]></dc:creator><pubDate>Sun, 04 Mar 2012 16:13:04 GMT</pubDate></item><item><title><![CDATA[Reply to wchat_t array initialisiert größer als es sollte on Sun, 04 Mar 2012 16:17:59 GMT]]></title><description><![CDATA[<p>Ähh, kann es sein, dass du so etwas wie vector&lt;wchar_t&gt; oder wstring suchst?</p>
<p>Außerdem ist wcslen sicherlich die falsche Funktion, um die Länge von dem Objekt festzustellen, dass du hier erstellt hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2188377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2188377</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 04 Mar 2012 16:17:59 GMT</pubDate></item><item><title><![CDATA[Reply to wchat_t array initialisiert größer als es sollte on Sun, 04 Mar 2012 16:24:36 GMT]]></title><description><![CDATA[<p>Also Datentyp such ich keinen anderen. vector is sicher komfortabler, aber ich arbeite mit vordefinierten Methoden weiter, und die brauchen einen wchar_t Array als Parameter.</p>
<p>Dass wcslen die falsche Methode ist, kann sein. Die sollte die Anzahl der chars (in meinem Fall wchar_t) in einem String zurückgeben. Dachte man kann ein wchar_t array als String sehen.</p>
<p>Aber wie ermittle ich dann die größe des arrays? Mit Größe meine ich jetzt die maximalen Anzahl der Elemente des Arrays, nicht den Speicherplatz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2188381</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2188381</guid><dc:creator><![CDATA[stb01]]></dc:creator><pubDate>Sun, 04 Mar 2012 16:24:36 GMT</pubDate></item><item><title><![CDATA[Reply to wchat_t array initialisiert größer als es sollte on Sun, 04 Mar 2012 16:33:48 GMT]]></title><description><![CDATA[<p>stb01 schrieb:</p>
<blockquote>
<p>Also Datentyp such ich keinen anderen. vector is sicher komfortabler, aber ich arbeite mit vordefinierten Methoden weiter, und die brauchen einen wchar_t Array als Parameter.</p>
</blockquote>
<p>Also einen vector&lt;wchar_t&gt; oder einen wstring. <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>
<blockquote>
<p>Dass wcslen die falsche Methode ist, kann sein. Die sollte die Anzahl der chars (in meinem Fall wchar_t) in einem String zurückgeben. Dachte man kann ein wchar_t array als String sehen.</p>
</blockquote>
<p>Ja, kann man. Aber die Länge eines Arrays ist nicht die Länge eines Strings. Das ist wie der Unterschied zwischen einem C-String und einem char-Array. Das gilt ganz besonders bei wchars.</p>
<blockquote>
<p>Aber wie ermittle ich dann die größe des arrays?</p>
</blockquote>
<p>Indem du sie dir merkst oder einen vector&lt;wchar_t&gt; oder wstring benutzt, die das schon für dich machen.</p>
<blockquote>
<p>Mit Größe meine ich jetzt die maximalen Anzahl der Elemente des Arrays, nicht den Speicherplatz.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Was soll der Unterschied sein.</p>
<p>Kann's sein, dass dir die Grundlagen zu C-Strings fehlen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2188384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2188384</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 04 Mar 2012 16:33:48 GMT</pubDate></item><item><title><![CDATA[Reply to wchat_t array initialisiert größer als es sollte on Sun, 04 Mar 2012 17:02:01 GMT]]></title><description><![CDATA[<blockquote>
<p>Kann's sein, dass dir die Grundlagen zu C-Strings fehlen?</p>
</blockquote>
<p>Kann sein, bin kein Fan von C und habs nie gelernt... In Java gibts solche probleme nicht, drum hunzt es mich hier gewaltig.</p>
<blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Was soll der Unterschied sein.</p>
</blockquote>
<p>Naja, bin wie gesagt kein Profi in c, aber die Speicherplatz ist nicht nur abhängig von der Anzahl der Elemente, sondern auch vom Datentyp der Elemente. So brauchen ein wchar_t Array und ein normales char Array mit gleich vielen Elementen unterschiedlich viel Speicherplatz, oder?</p>
<p>-----</p>
<p>Nichts desto trotz versuch ich mal, das ganze auf vector umzubaun. Weil nur weil ich die größe des Arrays mir merke, wirds trotzdem nicht kleiner, und den Methoden weitergeben muss ich das komplette Array.<br />
Erster Versuch ist schonmal gescheitert, vector&lt;wchar_t&gt; scheint aber zumindest mal nicht kompatibel zu sein mit nem wchar_t array, also genau wie ich das befürchtet hab wenn ich nen anderen Datentyp nehme.<br />
&quot;Convertierung in LPCWSTR nicht möglich&quot;</p>
<p>War aber nur jetzt mal auf die schnelle, arbeite jetzt mal weiter dran</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2188402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2188402</guid><dc:creator><![CDATA[stb01]]></dc:creator><pubDate>Sun, 04 Mar 2012 17:02:01 GMT</pubDate></item><item><title><![CDATA[Reply to wchat_t array initialisiert größer als es sollte on Mon, 05 Mar 2012 08:53:02 GMT]]></title><description><![CDATA[<p>stb01 schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>habe folgendes Problem:</p>
<pre><code class="language-cpp">wchar_t * text1 = new wchar_t[lineBreakPoint];
</code></pre>
<p>lineBreakPoint hat den Wert 23(in einem konkreten Fall). Die Länge des Arrays, also der Wert von wcslen(text1) beträgt aber 31.</p>
<p>Jetzt ist das Array größer, als ich es haben will. Problematisch ist es, wenn ich über dieses Array iteriere von Anfang bis Ende - denn dann sind die letzten Zeichen eben irgendwas, weil ich ja nur die ersten 23 Zeichen befülle.</p>
<p>Auch komisch ist, wenn ich z.B zum LinkBreakPoint 11 dazu addiere, wird das Array nur um 8 größer...<br />
Wie kann ich die größe dieses Arrays gezielt steuern?</p>
</blockquote>
<p>Dein Array ist offensichtlich nicht zu groß sondern zu klein. Denn das Ergebnis von wcslen muß <strong>IMMER</strong> kleiner als die Größe des Buffers sein.</p>
<p>Wenn Du über eine Zeichenkette iterierst, ist das Endekriterium immer das Nulzeichen.</p>
<pre><code class="language-cpp">&lt;char_type&gt; *cp = xxx; // char_type kann sein char oder wchar_t. xxx ist was auch immer Du gerade brauchst.

for( size_t i=0; cp[i]; i++ )
{
    .....
}
</code></pre>
<p>Alternativ kann statt dem Index auch ein zweiter Zeiger verwendet werden</p>
<pre><code class="language-cpp">&lt;char_type&gt; *cp = xxx; // char_type kann sein char oder wchar_t. xxx ist was auch immer Du gerade brauchst.

for( &lt;char_type&gt; *cp2=cp; *cp2; cp2++ )
{
    .....
}
</code></pre>
<p>wie die anderen schon geschrieben haben, die tatsächliche Größe des Puffers mußt Du Dir anderweitig merken.</p>
<p>mfg Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2188612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2188612</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Mon, 05 Mar 2012 08:53:02 GMT</pubDate></item><item><title><![CDATA[Reply to wchat_t array initialisiert größer als es sollte on Mon, 05 Mar 2012 08:57:06 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<blockquote>
<p>Mit Größe meine ich jetzt die maximalen Anzahl der Elemente des Arrays, nicht den Speicherplatz.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Was soll der Unterschied sein.</p>
<p>Kann's sein, dass dir die Grundlagen zu C-Strings fehlen?</p>
</blockquote>
<p>Also Sepp,</p>
<p>Die Anzal der Elemente ist das, was new mitgegeben wurde. Der erforderliche Speicherplatz ist Anzahl * sizeof( ein Element )</p>
<p>mfg Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2188618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2188618</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Mon, 05 Mar 2012 08:57:06 GMT</pubDate></item><item><title><![CDATA[Reply to wchat_t array initialisiert größer als es sollte on Mon, 05 Mar 2012 09:06:15 GMT]]></title><description><![CDATA[<p>Solang du keinen Nulldelimiter in dein allokiertes Array schreibst, wird wcslen dir irgendwelchen Murks zurückgeben - wenn du Pech hast auch mal ne ziemlich große Zahl. Warum? Na, wie strlen such wcslen einfach nach dem nächsten Nulldelimiter - und den findet es halt erst irgendwo im Nirvana hinter deinem Array. Wenn du Glück hast, dann tut das Programm nichts seltsames an der Stelle sondern stürzt einfach mit einer Access-Violation ab.</p>
<p>Dass das in Java &quot;anders&quot; ist ist klar, schließlich ist Java eine andere Sprache. Arrays wie in C und C++ gibts in Java einfach nicht. Was in Java &quot;Array&quot; heißt, ist in C++ am ehesten noch mit einem vector verwandt. Vermutlich willst du den auch benutzen. Oder solltest es wollen.</p>
<p>Was du an der Stelle auf jeden Fall verinnerlichen solltest: Versuch garnicht erst, Dinge die du von Java her kennst, auf C++ zu übertragen. Das geht meistens schief, oft sogar ganz gehörig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2188622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2188622</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 05 Mar 2012 09:06:15 GMT</pubDate></item><item><title><![CDATA[Reply to wchat_t array initialisiert größer als es sollte on Mon, 05 Mar 2012 09:11:26 GMT]]></title><description><![CDATA[<p>stb01 schrieb:</p>
<blockquote>
<p>&quot;Convertierung in LPCWSTR nicht möglich&quot;</p>
</blockquote>
<p>Dazu folgendes: LPCWSTR ist ein &quot;wchar_t const *&quot;.<br />
Den bekommst du aus einem std::vector&lt;wchar_t&gt; so:</p>
<pre><code class="language-cpp">std::vector&lt;wchar_t&gt; vec;
wchar_t const * ptr = &amp;(vec[0]);
</code></pre>
<p>und für std::wstring:</p>
<pre><code class="language-cpp">std::wstring str;
wchar_t const * ptr = str.c_str();
// theoretisch klappt beim String aber auch die Variante &amp;(str[0]);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2188623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2188623</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Mon, 05 Mar 2012 09:11:26 GMT</pubDate></item><item><title><![CDATA[Reply to wchat_t array initialisiert größer als es sollte on Mon, 05 Mar 2012 12:50:20 GMT]]></title><description><![CDATA[<p>DrakoXP schrieb:</p>
<blockquote>
<p>und für std::wstring:</p>
<pre><code class="language-cpp">std::wstring str;
wchar_t const * ptr = str.c_str();
// theoretisch klappt beim String aber auch die Variante &amp;(str[0]);
</code></pre>
</blockquote>
<p>Nö, nur <code>c_str</code> garantiert Nullterminierung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2188730</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2188730</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Mon, 05 Mar 2012 12:50:20 GMT</pubDate></item></channel></rss>