<?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[Verständnisproblem: wchar_t Abfrage auf &#x27;&#x5C;0&#x27;]]></title><description><![CDATA[<p>Hi,</p>
<p>kann mir jemand erklären warum dieser Code nicht funktioniert, bzw. warum ich bei der Abfrage (5. Durchlauf der Schleife) einen &quot;Zugriff Überlauf&quot; bekomme ?<br />
Genau dann, wenn auf das Ende des wchar_t arrays abgefragt wird.<br />
Der CodeGuard erzählt was von 8 Byte lang, aber in den lokalen Variablen sieht man das es 10 Bytes sind, die letzten 2 sind 0x0000 <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="😕"
    /><br />
Ist das bei wchar_t nicht zulässig, Problem mit new oder worin liegt hier mein Problem ?</p>
<pre><code class="language-cpp">const wchar_t *KeyA = L&quot;Test\0&quot;;
 wchar_t X;

 wchar_t *Text   = L&quot;Das ist ein Beispiel&quot;;
 wchar_t *pText  = Text;
 // Copy von KeyA anlegen
 wchar_t *cpKeyA = new wchar_t[wcslen(KeyA)];
 cpKeyA = wcscpy(cpKeyA, KeyA);

 // Pointer auf die einzelnen char von KeyA
 wchar_t *pKeyA = cpKeyA;
 // Original Pointer sichern
 wchar_t *pKeyASave = pKeyA;

 for ( int i = 0; i &lt; wcslen(Text); i++ )
	{
	 X = *pKeyA;
	 // hier wird X und pText verknüpft

	 if ( *(++pKeyA) == L'\0' )    // Beim 5. Durchlauf, wenn der Pointer auf '\0' zeigt,
	   {                           // wird das Programm durch den CodeGuard abgebrochen
		// Rücksetzen von pKeyA
		pKeyA = pKeyASave;
	   }
	}

 delete [] cpKeyA;
</code></pre>
<pre><code class="language-cpp">11.06.2011 10:57:25 CodeGuard(tm)-Prozess wurde gestartet: Wchar_t.exe(5820) 
Zugriff Überlauf im Prozess: Wchar_t.exe(5820)  - C:\Projekte\Test\wchar_t\Unit2.cpp#267
  Versuch, auf 2 Byte(s) an 0x01CD3748 zuzugreifen., an Offset 8 in Heap Block 0x01CD3740, der nur 8 Bytes lang ist.
    0x004041C5 - C:\Projekte\Test\wchar_t\Unit2.cpp#267
    0x004BAEED - Controls.pas#7191
    0x004BF245 - Controls.pas#9833
    0x00474A75 - StdCtrls.pas#4410
    0x004BF398 - Controls.pas#9900
    0x004BF245 - Controls.pas#9833
    0x0049E61D - Forms.pas#3962
    0x004BE8E3 - Controls.pas#9552
    0x00424B8E - Classes.pas#13492
    0x7760FD72
    0x7760FE4A
    0x77610943
    0x77610B36
    0x747FB4BA
    0x747FB51C
  Objekt-Array (0x01CD3740) [Größe: 8 Byte] war erstellt mit new[]
    0x0040416E - C:\Projekte\Test\wchar_t\Unit2.cpp#254
    0x004BAEED - Controls.pas#7191
    0x004BF245 - Controls.pas#9833
    0x00474A75 - StdCtrls.pas#4410
    0x004BF398 - Controls.pas#9900
    0x004BF245 - Controls.pas#9833
    0x0049E61D - Forms.pas#3962
    0x004BE8E3 - Controls.pas#9552
    0x00424B8E - Classes.pas#13492
    0x7760FD72
    0x7760FE4A
    0x77610943
    0x77610B36
    0x747FB4BA
    0x747FB51C

----------------------------------------------------------------------------------------------------------------------

Lokale Variablen:

Name		Wert
KeyA		:004EE5C0 L&quot;Test&quot;
X		L't' 116U (0x0074)
Text		:004EE5CC L&quot;Das ist ein Beispiel&quot;
pText		:004EE5CC L&quot;Das ist ein Beispiel&quot;
cpKeyA		:01CD3740 L&quot;Test&quot;
	[0]	L'T' 84U (0x0054)
	[1]	L'e' 101U (0x0065)
	[2]	L's' 115U (0x0073)
	[3]	L't' 116U (0x0074)
	[4]	L'\0' 0U (0x0000)
pKeyA		:01CD3748 L&quot;&quot;
pKeyASave	:01CD3740 L&quot;Test&quot;
Sender		:01C60420
this		:01C2E220
i		3 (0x00000003)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/288148/verständnisproblem-wchar_t-abfrage-auf-0</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 02:28:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/288148.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 11 Jun 2011 09:43:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verständnisproblem: wchar_t Abfrage auf &#x27;&#x5C;0&#x27; on Sat, 11 Jun 2011 09:43:50 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>kann mir jemand erklären warum dieser Code nicht funktioniert, bzw. warum ich bei der Abfrage (5. Durchlauf der Schleife) einen &quot;Zugriff Überlauf&quot; bekomme ?<br />
Genau dann, wenn auf das Ende des wchar_t arrays abgefragt wird.<br />
Der CodeGuard erzählt was von 8 Byte lang, aber in den lokalen Variablen sieht man das es 10 Bytes sind, die letzten 2 sind 0x0000 <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="😕"
    /><br />
Ist das bei wchar_t nicht zulässig, Problem mit new oder worin liegt hier mein Problem ?</p>
<pre><code class="language-cpp">const wchar_t *KeyA = L&quot;Test\0&quot;;
 wchar_t X;

 wchar_t *Text   = L&quot;Das ist ein Beispiel&quot;;
 wchar_t *pText  = Text;
 // Copy von KeyA anlegen
 wchar_t *cpKeyA = new wchar_t[wcslen(KeyA)];
 cpKeyA = wcscpy(cpKeyA, KeyA);

 // Pointer auf die einzelnen char von KeyA
 wchar_t *pKeyA = cpKeyA;
 // Original Pointer sichern
 wchar_t *pKeyASave = pKeyA;

 for ( int i = 0; i &lt; wcslen(Text); i++ )
	{
	 X = *pKeyA;
	 // hier wird X und pText verknüpft

	 if ( *(++pKeyA) == L'\0' )    // Beim 5. Durchlauf, wenn der Pointer auf '\0' zeigt,
	   {                           // wird das Programm durch den CodeGuard abgebrochen
		// Rücksetzen von pKeyA
		pKeyA = pKeyASave;
	   }
	}

 delete [] cpKeyA;
</code></pre>
<pre><code class="language-cpp">11.06.2011 10:57:25 CodeGuard(tm)-Prozess wurde gestartet: Wchar_t.exe(5820) 
Zugriff Überlauf im Prozess: Wchar_t.exe(5820)  - C:\Projekte\Test\wchar_t\Unit2.cpp#267
  Versuch, auf 2 Byte(s) an 0x01CD3748 zuzugreifen., an Offset 8 in Heap Block 0x01CD3740, der nur 8 Bytes lang ist.
    0x004041C5 - C:\Projekte\Test\wchar_t\Unit2.cpp#267
    0x004BAEED - Controls.pas#7191
    0x004BF245 - Controls.pas#9833
    0x00474A75 - StdCtrls.pas#4410
    0x004BF398 - Controls.pas#9900
    0x004BF245 - Controls.pas#9833
    0x0049E61D - Forms.pas#3962
    0x004BE8E3 - Controls.pas#9552
    0x00424B8E - Classes.pas#13492
    0x7760FD72
    0x7760FE4A
    0x77610943
    0x77610B36
    0x747FB4BA
    0x747FB51C
  Objekt-Array (0x01CD3740) [Größe: 8 Byte] war erstellt mit new[]
    0x0040416E - C:\Projekte\Test\wchar_t\Unit2.cpp#254
    0x004BAEED - Controls.pas#7191
    0x004BF245 - Controls.pas#9833
    0x00474A75 - StdCtrls.pas#4410
    0x004BF398 - Controls.pas#9900
    0x004BF245 - Controls.pas#9833
    0x0049E61D - Forms.pas#3962
    0x004BE8E3 - Controls.pas#9552
    0x00424B8E - Classes.pas#13492
    0x7760FD72
    0x7760FE4A
    0x77610943
    0x77610B36
    0x747FB4BA
    0x747FB51C

----------------------------------------------------------------------------------------------------------------------

Lokale Variablen:

Name		Wert
KeyA		:004EE5C0 L&quot;Test&quot;
X		L't' 116U (0x0074)
Text		:004EE5CC L&quot;Das ist ein Beispiel&quot;
pText		:004EE5CC L&quot;Das ist ein Beispiel&quot;
cpKeyA		:01CD3740 L&quot;Test&quot;
	[0]	L'T' 84U (0x0054)
	[1]	L'e' 101U (0x0065)
	[2]	L's' 115U (0x0073)
	[3]	L't' 116U (0x0074)
	[4]	L'\0' 0U (0x0000)
pKeyA		:01CD3748 L&quot;&quot;
pKeyASave	:01CD3740 L&quot;Test&quot;
Sender		:01C60420
this		:01C2E220
i		3 (0x00000003)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2076657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076657</guid><dc:creator><![CDATA[Ronco11]]></dc:creator><pubDate>Sat, 11 Jun 2011 09:43:50 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem: wchar_t Abfrage auf &#x27;&#x5C;0&#x27; on Sat, 11 Jun 2011 09:48:56 GMT]]></title><description><![CDATA[<p>Der Fehler dürfte bereits in Zeile 7 entstanden sein - dort hast du nur Platz für 4 Zeichen angelegt, aber nicht für den Null-Terminator - damit schreibst du in Zeile 8 über das Ende des reservierten Speichers hinaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2076660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076660</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 11 Jun 2011 09:48:56 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem: wchar_t Abfrage auf &#x27;&#x5C;0&#x27; on Sat, 11 Jun 2011 10:11:58 GMT]]></title><description><![CDATA[<p>Super, danke ! Das war sozusagen voll ins Schwarze. Ich hab's jetzt so gelöst:</p>
<pre><code class="language-cpp">wchar_t *cpKeyA = new wchar_t[wcslen(KeyA)+1];
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2076668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076668</guid><dc:creator><![CDATA[Ronco11]]></dc:creator><pubDate>Sat, 11 Jun 2011 10:11:58 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem: wchar_t Abfrage auf &#x27;&#x5C;0&#x27; on Sat, 11 Jun 2011 10:17:15 GMT]]></title><description><![CDATA[<p>Nur als Denkanstoß habe ich noch zwei Fragen für dich:</p>
<ul>
<li>Warum hantierst du überhaupt mit nackten Zeigern und nicht mit std::wstring?</li>
<li>Was genau erhoffst du die von dem \0 am Ende der ersten Zeile? (String-Literale sind schon implizit null-terminiert)</li>
<li>Welchen Sinn hat die Schleife überhaupt?</li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/2076670</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076670</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 11 Jun 2011 10:17:15 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem: wchar_t Abfrage auf &#x27;&#x5C;0&#x27; on Sat, 11 Jun 2011 11:11:33 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Nur als Denkanstoß habe ich noch zwei Fragen für dich:</p>
<ul>
<li>Warum hantierst du überhaupt mit nackten Zeigern und nicht mit std::wstring?</li>
<li>Was genau erhoffst du die von dem \0 am Ende der ersten Zeile? (String-Literale sind schon implizit null-terminiert)</li>
<li>Welchen Sinn hat die Schleife überhaupt?</li>
</ul>
</blockquote>
<ul>
<li>Ich hab es vorher schon mal mit AnsiString und UnicodeString versucht und hab da jede Menge an Warnungen bekommen, sowas wie &quot;Zeichen kann in der aktuellen Gebietseinstellung nicht dargestellt werden&quot;. Die Routine soll eine Zeichenkette (Textstring) verschlüsseln (X-ORen und 8. bit setzen). Um die Warnungen zu umgehen hab ich mich dann entschlossen, das als wchar_t array anzulegen.</li>
<li>OK, das ist überflüssig dann. War mir nicht bewust.</li>
<li>Wie gesagt soll mit dieser Schleife ein Text verschlüsselt werden. Ich hab die Schleife oben aber soweit abgespeckt um den Fehler zu lokalisieren.</li>
</ul>
<p>Bestimmt gibt es dazu bessere Methoden, die ich aber noch nicht kenne.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2076679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076679</guid><dc:creator><![CDATA[Ronco11]]></dc:creator><pubDate>Sat, 11 Jun 2011 11:11:33 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem: wchar_t Abfrage auf &#x27;&#x5C;0&#x27; on Sat, 11 Jun 2011 12:58:14 GMT]]></title><description><![CDATA[<p>Ich bin mir zwar nicht sicher, woher diese Warnungen kommen, aber solange du die verschlüsselten Daten nicht ausgeben willst, sollte es eigentlich kein Problem sein, wenn sie nicht darstellbar sind. btw, std::wstring ist der &quot;große&quot; Bruder von std::string und soll laut ANSI-Standard überall verfügbar sein. Damit müsste dann auch die Verschlüsselung kein Problem sein:</p>
<pre><code class="language-cpp">wstring text;
getline(wcin,text);
wstring key=L&quot;Schlüssel&quot;;
wstring code;
for(size_t i=0;i&lt;text.length();++i)
{
  wchar_t c = text[i] ^ key[i%key.length()];
  code.push_back(c);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2076720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2076720</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 11 Jun 2011 12:58:14 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem: wchar_t Abfrage auf &#x27;&#x5C;0&#x27; on Sun, 12 Jun 2011 11:56:39 GMT]]></title><description><![CDATA[<p>Hi CStoll,</p>
<p>danke für dein Code-Snippet, funktioniert prima. Deutlich weniger code zeilen als ich zuvor hatte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
2 Fragen hätte ich noch dazu:</p>
<ul>
<li>Ist es besser den zu kodierenden Textstring als Referenz zu übergeben, und den codierten Text auch als Referenz im Aufruf von Kodieren(), oder</li>
<li>den codierten Text als Referenz oder Zeiger zurückzugeben ?</li>
</ul>
<pre><code class="language-cpp">void __fastcall TForm1::Button2Click(TObject *Sender)
{
 wstring text = Memo1-&gt;Lines-&gt;Text.c_str();
 wstring codierter_text;

 codierter_text = Kodieren( text );
 Memo1-&gt;Lines-&gt;Text = codierter_text.c_str();
}
</code></pre>
<pre><code class="language-cpp">wstring __fastcall Kodieren( wstring Text )
{
 const wstring keyA = L&quot;Schlüssel&quot;;
 wstring code;

 for ( size_t i = 0; i &lt; Text.length(); ++i )
	{
	 wchar_t c = Text[i] ^ (keyA[i%keyA.length()] | 0x80);
	 code.push_back(c);
	}

 return code;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2077025</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2077025</guid><dc:creator><![CDATA[Ronco11]]></dc:creator><pubDate>Sun, 12 Jun 2011 11:56:39 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisproblem: wchar_t Abfrage auf &#x27;&#x5C;0&#x27; on Sun, 12 Jun 2011 18:40:34 GMT]]></title><description><![CDATA[<p>Den Originaltext würde ich als <code>const wstring&amp;</code> übergeben, bei der Rückgabe bin ich mir nicht sicher, ob Referenzparameter oder Rückgabewert günstiger sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2077239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2077239</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sun, 12 Jun 2011 18:40:34 GMT</pubDate></item></channel></rss>