<?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[Elegante Lösung für Strings mit Defines]]></title><description><![CDATA[<p>Hi!</p>
<p>Gibt es eine elegante Lösung, um einen zentral definierten String mir einem lokal vorgegebenen zu konkatenieren?</p>
<p>Z.B.:</p>
<p>#define OUTDIR ((wchar_t*)argv[2])<br />
...</p>
<p>copyFile(&quot;install.reg&quot;, <strong>OUTDIR</strong> &quot;\\install2.reg&quot;);</p>
<p>funktioniert so nicht...</p>
<p>Ich könnte es zwar über</p>
<p>wchar_t* file = OUTDIR;</p>
<p>file = wcsncat(file , &quot;\\install.reg&quot;, sizeof(&quot;\\install.reg&quot;) );</p>
<p>lösen, aber das ist nicht besonders kompakt... (vor allem bei vielen wiederholten Aufrufen).</p>
<p>Hat das jemand eine elegante Lösung mit Defines?</p>
<p>MfG</p>
<p>Matg40</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/167443/elegante-lösung-für-strings-mit-defines</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 23:42:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/167443.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 11 Dec 2006 10:03:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Elegante Lösung für Strings mit Defines on Mon, 11 Dec 2006 10:03:31 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Gibt es eine elegante Lösung, um einen zentral definierten String mir einem lokal vorgegebenen zu konkatenieren?</p>
<p>Z.B.:</p>
<p>#define OUTDIR ((wchar_t*)argv[2])<br />
...</p>
<p>copyFile(&quot;install.reg&quot;, <strong>OUTDIR</strong> &quot;\\install2.reg&quot;);</p>
<p>funktioniert so nicht...</p>
<p>Ich könnte es zwar über</p>
<p>wchar_t* file = OUTDIR;</p>
<p>file = wcsncat(file , &quot;\\install.reg&quot;, sizeof(&quot;\\install.reg&quot;) );</p>
<p>lösen, aber das ist nicht besonders kompakt... (vor allem bei vielen wiederholten Aufrufen).</p>
<p>Hat das jemand eine elegante Lösung mit Defines?</p>
<p>MfG</p>
<p>Matg40</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1189956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1189956</guid><dc:creator><![CDATA[Matg40]]></dc:creator><pubDate>Mon, 11 Dec 2006 10:03:31 GMT</pubDate></item><item><title><![CDATA[Reply to Elegante Lösung für Strings mit Defines on Mon, 11 Dec 2006 10:08:34 GMT]]></title><description><![CDATA[<p>Es gibt eine Lösung ohne den Präprozessor zu verwenden. Die Typendefinition von std::basic_string nämlich: std::wstring.</p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1189963</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1189963</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Mon, 11 Dec 2006 10:08:34 GMT</pubDate></item><item><title><![CDATA[Reply to Elegante Lösung für Strings mit Defines on Mon, 11 Dec 2006 10:09:31 GMT]]></title><description><![CDATA[<p>Diese automatische Verkettung, die du dort ausnutzen willst, klappt nur mit String-Literalen und nicht mit Variablen (die Ansätze zum Whitespace-Overloading haben sich leider als Aprilscherz entpuppt :D).</p>
<p>Du könntest eventuell umsteigen auf std::string bzw. std::wstring anstelle von char*/wchar_t*):</p>
<pre><code class="language-cpp">#define OUTDIR(file) (string(argv[2]) + file).c_str();

CopyFile(&quot;install.reg&quot;,OUTDIR(&quot;\\install2.reg&quot;));
</code></pre>
<p>(eventuell könntest du dir auch auf CString-Basis etwas zusammenbauen)</p>
<p>PS: Bitte entscheide dich zunächst einmal, ob du mit char oder wchar_t arbeiten willst - so eine bunte Kombination ist selten besonders gesund.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1189965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1189965</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 11 Dec 2006 10:09:31 GMT</pubDate></item><item><title><![CDATA[Reply to Elegante Lösung für Strings mit Defines on Mon, 11 Dec 2006 10:28:43 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Erst mal vielen Dank für die schnellen Lösungen !!!</p>
<p>Ich habe jetzt nur noch ein Problem: von 'const unsigned short *' zu 'char *' zu kommen.</p>
<p>Beim einfachen Cast ( (char*) wideString.c_str() ) wird nur das erste Zeichen verwendet.</p>
<p>Ich habe (vereinfacht) folgenden Code:</p>
<p>wstring wideString = wstring((wchar_t*)argv[3]);</p>
<p>copyFile(&quot;install.reg&quot;, wideString.c_str() );</p>
<p>Dabei hat er mit dem zweiten Parameter das Problem (copyFile erwartet zweimal char*) ....</p>
<p>MfG</p>
<p>Matg40</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1189978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1189978</guid><dc:creator><![CDATA[Matg40]]></dc:creator><pubDate>Mon, 11 Dec 2006 10:28:43 GMT</pubDate></item><item><title><![CDATA[Reply to Elegante Lösung für Strings mit Defines on Mon, 11 Dec 2006 10:35:00 GMT]]></title><description><![CDATA[<p>Wie gesagt, du solltest kein Mix aus char und wchar_t verwenden. Nutz die entsprechende Funktion.</p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1189982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1189982</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Mon, 11 Dec 2006 10:35:00 GMT</pubDate></item><item><title><![CDATA[Reply to Elegante Lösung für Strings mit Defines on Mon, 11 Dec 2006 10:35:11 GMT]]></title><description><![CDATA[<p>Wieso mischst du überhaupt UNICODE (wchar_t) mit ASCII (char)? Entscheide dich bitte für eins und ziehe diese Entscheidung konsequent durch.</p>
<p>(wenn du wirklich char-Daten in einer UNICODE-Umgebung benötigst, mußt du entsprechende Typumwandlungen vornehmen, z.B. über CW2A())</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1189983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1189983</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 11 Dec 2006 10:35:11 GMT</pubDate></item><item><title><![CDATA[Reply to Elegante Lösung für Strings mit Defines on Mon, 11 Dec 2006 10:52:38 GMT]]></title><description><![CDATA[<p>Matg40! Es ist naiv zu glauben, das du durch einen Cast einen char-String in einen wide String umwandeln kannst. Das funktioniert leider nicht so einfach (schön wäre es ja). Du brauchst dafür eine vernünftige Konvertierungsroutine, die auch die locales beachtet und jedes einzelne char-Zeichen konvertiert (das macht ein Cast nicht!).</p>
<p>Ich hatte mal im Internet das hier gefunden und es funktioniert sehr gut:</p>
<pre><code class="language-cpp">/* string2wstring.h */
#pragma once

#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;locale&gt;
#include &lt;functional&gt;
#include &lt;iostream&gt;

// Put this class in your personal toolbox...
template&lt;class E,
class T = std::char_traits&lt;E&gt;,
class A = std::allocator&lt;E&gt; &gt;

class Widen : public std::unary_function&lt;
	const std::string&amp;, std::basic_string&lt;E, T, A&gt; &gt;
{
	std::locale loc_;
	const std::ctype&lt;E&gt;* pCType_;

	// No copy-constructor, no assignment operator...
	Widen(const Widen&amp;);
	Widen&amp; operator= (const Widen&amp;);

public:
	// Constructor...
	Widen(const std::locale&amp; loc = std::locale()) : loc_(loc)
	{
#if defined(_MSC_VER) &amp;&amp; (_MSC_VER &lt; 1300) // VC++ 6.0...
		using namespace std;
		pCType_ = &amp;_USE(loc, ctype&lt;E&gt; );
#else
		pCType_ = &amp;std::use_facet&lt;std::ctype&lt;E&gt; &gt;(loc);
#endif
	}

	// Conversion...
	std::basic_string&lt;E, T, A&gt; operator() (const std::string&amp; str) const
	{
		typename std::basic_string&lt;E, T, A&gt;::size_type srcLen =
			str.length();
		const char* pSrcBeg = str.c_str();
		std::vector&lt;E&gt; tmp(srcLen);

		pCType_-&gt;widen(pSrcBeg, pSrcBeg + srcLen, &amp;tmp[0]);
		return std::basic_string&lt;E, T, A&gt;(&amp;tmp[0], srcLen);
	}
};

// How to use it...
int main()
{
Widen&lt;wchar_t&gt; to_wstring;
std::string s = &quot;my test string&quot;;
std::wstring w = to_wstring(s);
std::wcout &lt;&lt; w &lt;&lt; L&quot;\n&quot;;
}
</code></pre>
<p>Ich lege mir diese Headerdatei in jedes Projekt, das ich neu anlege. Die main() kommentiere ich dann einfach aus. Wenn du eine eigene Library-Sammlung hast, leg sie da am besten gleich mit rein.</p>
<p>Und wie von meinen Vorrednern bereits gesagt: entscheide dich für std::string oder std::wstring in deinen Programmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1189990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1189990</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Mon, 11 Dec 2006 10:52:38 GMT</pubDate></item><item><title><![CDATA[Reply to Elegante Lösung für Strings mit Defines on Mon, 11 Dec 2006 11:41:23 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<p>[...]entscheide dich für std::string oder std::wstring in deinen Programmen.</p>
</blockquote>
<p>IMHO muss man beachten, dass Unicode (also std::wstring/wchar_t) nicht für Win95/98/Me zur Verfügung steht!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1190028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1190028</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Mon, 11 Dec 2006 11:41:23 GMT</pubDate></item></channel></rss>