<?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[Wieso geht CString::Format zig mal gut und jetzt nicht mehr?]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich hole mir so den aktuellen Ordner wo die Exe liegt:</p>
<pre><code class="language-cpp">CString CMyApp::GetCurFolder()
{
	char buf[256];
	GetModuleFileName(NULL, buf, 255);
	CString strPfad;
	strPfad.Format(&quot;%s&quot;, buf);
	int nTmp = strPfad.ReverseFind('\\');
	strPfad.Delete(nTmp,strPfad.GetLength()-nTmp);	

	return strPfad;
}
</code></pre>
<p>Das funktioniert in mehreren Anwendungen (auch in dieser) prima.<br />
Nur seit gestern, wo ich diese Funktion ein weiteres Mal aufrufe, geht dieser neue Aufruf jedes Mal schief. <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="😕"
    /></p>
<p>Wodran mag das liegen? Wie kann ich da suchen?<br />
buf wird noch artig und korrekt gefüllt.<br />
Das Format in Zeile 6 geht allerdings voll daneben und das Programm stürzt gepflegt und zielsicher ab. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/185925/wieso-geht-cstring-format-zig-mal-gut-und-jetzt-nicht-mehr</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 14:00:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/185925.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 03 Jul 2007 07:53:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wieso geht CString::Format zig mal gut und jetzt nicht mehr? on Tue, 03 Jul 2007 07:53:35 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich hole mir so den aktuellen Ordner wo die Exe liegt:</p>
<pre><code class="language-cpp">CString CMyApp::GetCurFolder()
{
	char buf[256];
	GetModuleFileName(NULL, buf, 255);
	CString strPfad;
	strPfad.Format(&quot;%s&quot;, buf);
	int nTmp = strPfad.ReverseFind('\\');
	strPfad.Delete(nTmp,strPfad.GetLength()-nTmp);	

	return strPfad;
}
</code></pre>
<p>Das funktioniert in mehreren Anwendungen (auch in dieser) prima.<br />
Nur seit gestern, wo ich diese Funktion ein weiteres Mal aufrufe, geht dieser neue Aufruf jedes Mal schief. <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="😕"
    /></p>
<p>Wodran mag das liegen? Wie kann ich da suchen?<br />
buf wird noch artig und korrekt gefüllt.<br />
Das Format in Zeile 6 geht allerdings voll daneben und das Programm stürzt gepflegt und zielsicher ab. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317295</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317295</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Tue, 03 Jul 2007 07:53:35 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso geht CString::Format zig mal gut und jetzt nicht mehr? on Tue, 03 Jul 2007 07:59:38 GMT]]></title><description><![CDATA[<p>Erstens: Ich vermute mal, vor dem Absturz wird dir das Programm noch eine (möglicherweise kryptische) Fehlermeldung entgegenwerfen - selbst wenn du sie nicht verstehst, solltest du sie uns mal präsentieren.</p>
<p>Zweitens: Bist du sicher, daß buf auch null-terminiert ist?</p>
<p>Und drittens: Um den Inhalt eines char-Arrays in den CString zu kopieren, brauchst du kein Format() - da reich eine Zuweisung <code>strPfad=buf;</code> aus <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317298</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317298</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 03 Jul 2007 07:59:38 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso geht CString::Format zig mal gut und jetzt nicht mehr? on Tue, 03 Jul 2007 08:14:19 GMT]]></title><description><![CDATA[<p>1.) War klar, jetzt will ich die Meldung kopieren, jetzt kommt sie nicht mehr. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /><br />
2.) Nein, ich hab den code irgendwann mal irgendwie vermutlich von <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39131.html" rel="nofollow">hier</a> (vor dem Edit) kopiert und dann immer verwendet. <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 />
3.) Zuweisungen klappen immer wieder mal nicht, wann habe ich nicht raus, aber Format war bisher zuverlässig. <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="🙄"
    /><br />
Hier ist gerade so ein Beispiel:</p>
<pre><code class="language-cpp">CString strCmd = _T(&quot;\&quot;&quot;) + strCurFolder + _T(&quot;\\arj.exe\&quot; a -y -v1440 \&quot;&quot; + strKurzOrdner + &quot;AD3_BU_&quot; + strHeute + &quot;\&quot; \&quot;&quot; + strKurzZiel + _T(&quot;\&quot;&quot;));
</code></pre>
<p>Hier sieht es nach der Addition so aus, als wäre strKurzZiel leer gewesen - ist es aber laut Debugger nicht.<br />
So geht es dagegen:</p>
<pre><code class="language-cpp">CString strCmd;
strCmd.Format(_T(&quot;\&quot;%s\\arj.exe\&quot; a -y -v1440 \&quot;AD3_BU_%s\&quot; \&quot;%s\&quot;&quot;), strCurFolder, strHeute, strKurzZiel);
</code></pre>
<p>Übrigens: Replace (das zweite) funktioniert in dem Codestück auch nicht. <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 />
Das tut einfach nix, obwohl in strKurzZiel ein Dateiname steht, der auf .ldf endet.<br />
Ein Replace ein paar Zeilen drüber hat es nämlich da &quot;grade&quot; hingeschrieben:</p>
<pre><code class="language-cpp">strZiel.Replace(_T(&quot;.mdf&quot;), _T(&quot;.ldf&quot;));
// ... wirklich wenige Zeilen
CString strKurzOrdner, strKurzZiel;
// Hinten Wildcard setzen
GetShortPathName(strZiel, strKurzZiel.GetBuffer(strKurzZiel.GetLength()+1), MAX_PATH);
strKurzZiel.Replace(_T(&quot;.ldf&quot;), _T(&quot;.*&quot;));
</code></pre>
<p>PS: Gibt es eigentlich einfache Möglichkeiten, Dateien zu packen und zu entpacken? Arj streikt irgendwie auch noch fleissig... <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1317306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317306</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Tue, 03 Jul 2007 08:14:19 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso geht CString::Format zig mal gut und jetzt nicht mehr? on Tue, 03 Jul 2007 08:33:18 GMT]]></title><description><![CDATA[<p>@2: Das beantwortet noch nicht die Frage <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Wie sieht es denn aus, wenn du das Programm durch den Debugger jagst?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5290">@3</a>: Eigentlich sollten String-Zuweisungen auch problemlos klappen - zumindest solange du nicht zu viele char* dazwischen reinaddiert hast.</p>
<p>@Replace:</p>
<pre><code class="language-cpp">GetShortPathName(strZiel, strKurzZiel.GetBuffer(strKurzZiel.GetLength()+1), MAX_PATH);
</code></pre>
<p>strKurzZiel war vor dem Aufruf leer - d.h. du forderst von ihm Platz für <strong>ein</strong> Zeichen und willst dort MAX_PATH Zeichen reinquetschen. (außerdem mußt du den Speicher noch mit ReleaseBuffer() freigeben, bevor du den String wieder verwenden kannst)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317313</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 03 Jul 2007 08:33:18 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso geht CString::Format zig mal gut und jetzt nicht mehr? on Tue, 03 Jul 2007 08:36:55 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>@2: Das beantwortet noch nicht die Frage <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Wie sieht es denn aus, wenn du das Programm durch den Debugger jagst?</p>
</blockquote>
<p>Ich hab doch mit &quot;Nein&quot; geantwortet. &quot;Nein, ich bin mir nicht sicher.&quot; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5290">@3</a>: Eigentlich sollten String-Zuweisungen auch problemlos klappen - zumindest solange du nicht zu viele char* dazwischen reinaddiert hast.</p>
</blockquote>
<p>char* vermeide ich nach Möglichkeit, in der Addition kommen nur CStrings vor.</p>
<blockquote>
<p>@Replace:</p>
<pre><code class="language-cpp">GetShortPathName(strZiel, strKurzZiel.GetBuffer(strKurzZiel.GetLength()+1), MAX_PATH);
</code></pre>
<p>strKurzZiel war vor dem Aufruf leer - d.h. du forderst von ihm Platz für <strong>ein</strong> Zeichen und willst dort MAX_PATH Zeichen reinquetschen. (außerdem mußt du den Speicher noch mit ReleaseBuffer() freigeben, bevor du den String wieder verwenden kannst)</p>
</blockquote>
<p>Okay... ich werde also vorher einmal den langen Pfad zuweisen, dann erst GetShortPathName aufrufen. Das sollte genug Platz schaffen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Und ReleaseBuffer baue ich gleich mal ein. Das vergesse ich immer. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317316</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317316</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Tue, 03 Jul 2007 08:36:55 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso geht CString::Format zig mal gut und jetzt nicht mehr? on Tue, 03 Jul 2007 08:40:25 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">CString strCmd; 
strCmd.Format(_T(&quot;\&quot;%s\\arj.exe\&quot; a -y -v1440 \&quot;AD3_BU_%s\&quot; \&quot;%s\&quot;&quot;), strCurFolder, strHeute, strKurzZiel);
</code></pre>
<p>In einem Ellipsen Operator sollte man vermeiden Objekte zu übergeben.<br />
Es funktioniert nicht zuverlässig.<br />
CString ist eben nicht austauschbar mit LPCSTR undhier wird der besagte Operator nicht aufgerufen. Es wird das Objekt auf den Stack gepackt.</p>
<p>Korrekt wäre nur:</p>
<pre><code class="language-cpp">CString strCmd; 
strCmd.Format(_T(&quot;\&quot;%s\\arj.exe\&quot; a -y -v1440 \&quot;AD3_BU_%s\&quot; \&quot;%s\&quot;&quot;), strCurFolder.GetString(), strHeute.GetString(), strKurzZiel.GetString());
</code></pre>
<p>Oder entsprechende Varianten mit static_cast&lt;LPCTSTR&gt;();</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317319</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 03 Jul 2007 08:40:25 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso geht CString::Format zig mal gut und jetzt nicht mehr? on Tue, 03 Jul 2007 08:42:31 GMT]]></title><description><![CDATA[<p>ReleaseBuffer scheint einige der Probleme verursacht zu haben. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Das Replace klappt jetzt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Ich gucke mal weiter. <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317320</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Tue, 03 Jul 2007 08:42:31 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso geht CString::Format zig mal gut und jetzt nicht mehr? on Tue, 03 Jul 2007 08:45:11 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<pre><code class="language-cpp">CString strCmd; 
strCmd.Format(_T(&quot;\&quot;%s\\arj.exe\&quot; a -y -v1440 \&quot;AD3_BU_%s\&quot; \&quot;%s\&quot;&quot;), strCurFolder, strHeute, strKurzZiel);
</code></pre>
<p>In einem Ellipsen Operator sollte man vermeiden Objekte zu übergeben.<br />
Es funktioniert nicht zuverlässig.<br />
CString ist eben nicht austauschbar mit LPCSTR undhier wird der besagte Operator nicht aufgerufen. Es wird das Objekt auf den Stack gepackt.</p>
<p>Korrekt wäre nur:</p>
<pre><code class="language-cpp">CString strCmd; 
strCmd.Format(_T(&quot;\&quot;%s\\arj.exe\&quot; a -y -v1440 \&quot;AD3_BU_%s\&quot; \&quot;%s\&quot;&quot;), strCurFolder.GetString(), strHeute.GetString(), strKurzZiel.GetString());
</code></pre>
<p>Oder entsprechende Varianten mit static_cast&lt;LPCTSTR&gt;();</p>
</blockquote>
<p>Uff, das würde für mich heißen, dass ich zig Projekte nochmal nach sowas durchstöbern muss. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Wieso liest man sowas nicht öfters/früher? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Wie schlimm ist es, wenn man das nun nicht anpasst? Ich meine, es läuft bis auf sowas wie eben (wo ich ReleaseBuffer als schuldig abgestempelt hab) einwandfrei. <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="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317324</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Tue, 03 Jul 2007 08:45:11 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso geht CString::Format zig mal gut und jetzt nicht mehr? on Tue, 03 Jul 2007 09:51:46 GMT]]></title><description><![CDATA[<p>CString &quot;featuring&quot; special Hack so dass es trotzdem geht. (Also nen CString an &quot;...&quot; Funktionen übergeben).<br />
MS hat dies als non-std Extension so implementiert dass einfach das ganze Objekt auf den Stack gepusht wird.<br />
Da ein CString genau aus einem Zeiger besteht, und der auf das erste Zeichen des Strings zeigt... geht es.</p>
<p>Der eigentliche Fehler ist die Verwendung von GetBuffer() mit 1) einer zu kleinen Grösse und 2) ohne dass ReleaseBuffer() aufgerufen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317361</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317361</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 03 Jul 2007 09:51:46 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso geht CString::Format zig mal gut und jetzt nicht mehr? on Tue, 03 Jul 2007 10:47:22 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>CString &quot;featuring&quot; special Hack so dass es trotzdem geht. (Also nen CString an &quot;...&quot; Funktionen übergeben).<br />
MS hat dies als non-std Extension so implementiert dass einfach das ganze Objekt auf den Stack gepusht wird.<br />
Da ein CString genau aus einem Zeiger besteht, und der auf das erste Zeichen des Strings zeigt... geht es.</p>
</blockquote>
<p>Puh, danke. <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="🙂"
    /></p>
<blockquote>
<p>Der eigentliche Fehler ist die Verwendung von GetBuffer() mit 1) einer zu kleinen Grösse und 2) ohne dass ReleaseBuffer() aufgerufen wird.</p>
</blockquote>
<p>Okay, das habe ich jetzt an den Stellen behoben. Ich muss jetzt nochmal suchen, wo das noch vorkommt und da nachbessern. <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317399</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Tue, 03 Jul 2007 10:47:22 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso geht CString::Format zig mal gut und jetzt nicht mehr? on Tue, 03 Jul 2007 12:59:41 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>CString &quot;featuring&quot; special Hack so dass es trotzdem geht. (Also nen CString an &quot;...&quot; Funktionen übergeben).<br />
MS hat dies als non-std Extension so implementiert dass einfach das ganze Objekt auf den Stack gepusht wird.<br />
Da ein CString genau aus einem Zeiger besteht, und der auf das erste Zeichen des Strings zeigt... geht es.</p>
</blockquote>
<p>Hatte ich auch schon geschrieben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317495</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 03 Jul 2007 12:59:41 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso geht CString::Format zig mal gut und jetzt nicht mehr? on Tue, 03 Jul 2007 16:08:01 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>CString &quot;featuring&quot; special Hack so dass es trotzdem geht. (Also nen CString an &quot;...&quot; Funktionen übergeben).<br />
MS hat dies als non-std Extension so implementiert dass einfach das ganze Objekt auf den Stack gepusht wird.<br />
Da ein CString genau aus einem Zeiger besteht, und der auf das erste Zeichen des Strings zeigt... geht es.</p>
</blockquote>
<p>Hatte ich auch schon geschrieben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
</blockquote>
<p>Nicht ganz. Du hast geschrieben warum es eigentlich falsch ist und nicht gehen sollte. Der Trick dabei ist aber dass es eben doch geht, weil MS es absichtlich so hingefummelt hat DAMIT es eben geht.</p>
<p>Wirklich böse ist nur wenn man einen CString so an einen Mutator ala scanf übergibt - DAS macht dann Probleme, da der CString nix davon mitbekommt dass er gleich &quot;überpinselt&quot; wird. Dadurch hebelt man das COW/Reference Counting aus, und überschreibt im schlimmsten Fall sogar fremden Speicher.</p>
<p>Daher *immer* den String mit GetBuffer &quot;locken&quot; und mit ReleaseBuffer wieder &quot;freigeben&quot;.</p>
<p>Am Besten man lässt gleich die Finger von CString und nimmt stattdessen std::string (oder boost::shared_ptr<a href="std::string" rel="nofollow">std::string</a> für Leute die unbedingt COW Strings wollen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317613</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 03 Jul 2007 16:08:01 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso geht CString::Format zig mal gut und jetzt nicht mehr? on Tue, 03 Jul 2007 19:43:16 GMT]]></title><description><![CDATA[<p>Friede! Ich gebe mich geschlagen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1317725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1317725</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 03 Jul 2007 19:43:16 GMT</pubDate></item></channel></rss>