<?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[VS streikt]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>hab ein Problem mit einer Suchfunktion in meinem Programm. Der Witz ist, dass mit dem Borland Builder alles wunderbar, ohne Warnungen durchläuft, mit VS 2005 Prof. aber folgende Fehlermeldung erscheint:</p>
<pre><code>Compiling...
1&gt;test.cpp
1&gt;.\test.cpp(65) : error C2664: 'sprintf' : cannot convert parameter 1 from 'TCHAR [1000]' to 'char *'
1&gt;        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
</code></pre>
<p>Hier mal die Funktion in voller Ausführlichkeit:</p>
<pre><code class="language-cpp">dirsearch(&quot;c:\\&quot;, &quot;*.txt*&quot;);
</code></pre>
<pre><code class="language-cpp">void dirsearch(const string&amp; path, const string&amp; filter) 
{ 
  HANDLE hFindFile; 
  WIN32_FIND_DATA wfd; 

  TCHAR buf[1000];

  sprintf(buf, &quot;%s\\%s&quot;, path, filter);  //hier liegt anscheinend das Problem 
  hFindFile = FindFirstFile(buf, &amp;wfd); 
	if (hFindFile != INVALID_HANDLE_VALUE) 
	{ 
	  do
	  {
	    if ((wfd.dwFileAttributes &amp; FILE_ATTRIBUTE_DIRECTORY) == 0) 
               cout &lt;&lt; path &lt;&lt;&quot;\\&quot;&lt;&lt; wfd.cFileName &lt;&lt; endl;   
	  }while(FindNextFile(hFindFile, &amp;wfd) != 0); 

           FindClose(hFindFile); 
	} 
}
</code></pre>
<p>Ich vermute, dass es was mit Unicode/Ansi zu tun hat und habe deswegen in den Projekteinstellungen mal ein bisschen rumgedoktert (Unicode auf Multibyte usw.) leider ohne Ergebnis <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="😞"
    /><br />
Ich hoffe ihr könnt mir vielleicht irgendwie weiterhelfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/180562/vs-streikt</link><generator>RSS for Node</generator><lastBuildDate>Wed, 08 Jul 2026 19:30:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/180562.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 04 May 2007 07:27:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to VS streikt on Fri, 04 May 2007 07:27:17 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>hab ein Problem mit einer Suchfunktion in meinem Programm. Der Witz ist, dass mit dem Borland Builder alles wunderbar, ohne Warnungen durchläuft, mit VS 2005 Prof. aber folgende Fehlermeldung erscheint:</p>
<pre><code>Compiling...
1&gt;test.cpp
1&gt;.\test.cpp(65) : error C2664: 'sprintf' : cannot convert parameter 1 from 'TCHAR [1000]' to 'char *'
1&gt;        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
</code></pre>
<p>Hier mal die Funktion in voller Ausführlichkeit:</p>
<pre><code class="language-cpp">dirsearch(&quot;c:\\&quot;, &quot;*.txt*&quot;);
</code></pre>
<pre><code class="language-cpp">void dirsearch(const string&amp; path, const string&amp; filter) 
{ 
  HANDLE hFindFile; 
  WIN32_FIND_DATA wfd; 

  TCHAR buf[1000];

  sprintf(buf, &quot;%s\\%s&quot;, path, filter);  //hier liegt anscheinend das Problem 
  hFindFile = FindFirstFile(buf, &amp;wfd); 
	if (hFindFile != INVALID_HANDLE_VALUE) 
	{ 
	  do
	  {
	    if ((wfd.dwFileAttributes &amp; FILE_ATTRIBUTE_DIRECTORY) == 0) 
               cout &lt;&lt; path &lt;&lt;&quot;\\&quot;&lt;&lt; wfd.cFileName &lt;&lt; endl;   
	  }while(FindNextFile(hFindFile, &amp;wfd) != 0); 

           FindClose(hFindFile); 
	} 
}
</code></pre>
<p>Ich vermute, dass es was mit Unicode/Ansi zu tun hat und habe deswegen in den Projekteinstellungen mal ein bisschen rumgedoktert (Unicode auf Multibyte usw.) leider ohne Ergebnis <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="😞"
    /><br />
Ich hoffe ihr könnt mir vielleicht irgendwie weiterhelfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278539</guid><dc:creator><![CDATA[ITAzubi23]]></dc:creator><pubDate>Fri, 04 May 2007 07:27:17 GMT</pubDate></item><item><title><![CDATA[Reply to VS streikt on Fri, 04 May 2007 07:51:50 GMT]]></title><description><![CDATA[<p>sprintf kommt nicht mit TCHAR zurecht, nimm lieber das hier</p>
<pre><code class="language-cpp">TCHAR buf[1000];
SecureZeroMemory(buf, 1000);
_stprintf_s(buf, _T(&quot;%s\\%s&quot;), path, filter);
</code></pre>
<p>wobei ich aber nicht umbedingt es so machen wuerde, da du ja beides aps string bekommst:</p>
<pre><code class="language-cpp">std::string buf;
buf = path + _T(&quot;\\&quot;) + filter;

TCHAR *strBuff = new TCHAR[(buf.length())+(sizeof(TCHAR))];
_tcscpy_s(strBuff, buf);

// do something with the strBuff

delete [] strBuff;
strBuff = 0;
</code></pre>
<p>btw, mach es lieber unicode und multibyte compatibel, dh wenn du schon mit TCHAR arbeitest solltest du ein string oder wstring definieren, ich selber habe da</p>
<p>std::tstring</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278550</guid><dc:creator><![CDATA[EXDW]]></dc:creator><pubDate>Fri, 04 May 2007 07:51:50 GMT</pubDate></item><item><title><![CDATA[Reply to VS streikt on Fri, 04 May 2007 09:40:13 GMT]]></title><description><![CDATA[<p>Vielen Dank Evil, jetzt läufts durch(Compiler und Linker).<br />
Allerdings haut mir jetzt der Just-In-Time Debugger noch dazwischen und meldet eine &quot;Unhandled Win32 Exception&quot; bei der Programmausführung und bricht es ab.<br />
Vielleicht hatte schon mal jemand ein ähnliches Problem und kann mir auch damit helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278636</guid><dc:creator><![CDATA[ITAzubi23]]></dc:creator><pubDate>Fri, 04 May 2007 09:40:13 GMT</pubDate></item><item><title><![CDATA[Reply to VS streikt on Fri, 04 May 2007 10:20:30 GMT]]></title><description><![CDATA[<p>kannst du im debug rein springen wo der fehler angezeigt wurde ?</p>
<p>kannst du auch gleich mal bitte zeigen wie das code nun aussieht, also die funktion</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278654</guid><dc:creator><![CDATA[EXDW]]></dc:creator><pubDate>Fri, 04 May 2007 10:20:30 GMT</pubDate></item><item><title><![CDATA[Reply to VS streikt on Fri, 04 May 2007 10:53:55 GMT]]></title><description><![CDATA[<p>path und filter sind ja auch std::strings...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278677</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Fri, 04 May 2007 10:53:55 GMT</pubDate></item><item><title><![CDATA[Reply to VS streikt on Fri, 04 May 2007 11:23:08 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void dirsearch(const string&amp; path, const string&amp; filter) 
{ 
  HANDLE hFindFile; 
  WIN32_FIND_DATA wfd; 

  string buf;

  buf = path + &quot;\\&quot; + filter;  //So?
  hFindFile = FindFirstFile(buf.c_str(), &amp;wfd); 
	if (hFindFile != INVALID_HANDLE_VALUE) 
	{ 
	  do
	  {
	    if ((wfd.dwFileAttributes &amp; FILE_ATTRIBUTE_DIRECTORY) == 0) 
               cout &lt;&lt; path &lt;&lt;&quot;\\&quot;&lt;&lt; wfd.cFileName &lt;&lt; endl;   
	  }while(FindNextFile(hFindFile, &amp;wfd) != 0); 

           FindClose(hFindFile); 
	} 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1278700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278700</guid><dc:creator><![CDATA[Benutzernamen ein.]]></dc:creator><pubDate>Fri, 04 May 2007 11:23:08 GMT</pubDate></item><item><title><![CDATA[Reply to VS streikt on Fri, 04 May 2007 11:37:52 GMT]]></title><description><![CDATA[<p>Hier der Code:</p>
<pre><code class="language-cpp">void dirsearch(const string&amp; path, const string&amp; filter) 
{ 
  HANDLE hFindFile; 
  WIN32_FIND_DATA wfd; 

  TCHAR buf[1000];
  SecureZeroMemory(buf, 1000); 
  _stprintf_s(buf, _T(&quot;%s\\%s&quot;), path, filter);  //hier bleibt der Debugger hängen
</code></pre>
<p>An der oben gezeigten Stelle springt er in die output.c und hängt dann im folgenden Block:</p>
<pre><code class="language-cpp">else  /* _UNICODE */
                if (flags &amp; (FL_LONG|FL_WIDECHAR)) {
                    if (text.wz == NULL) /* NULL passed, use special string */
                        text.wz = __wnullstring;
                    bufferiswide = 1;
                    pwch = text.wz;
                    while ( i-- &amp;&amp; *pwch )
                        ++pwch;
                    textlen = (int)(pwch - text.wz);
                    /* textlen now contains length in wide chars */
                } else {
                    if (text.sz == NULL) /* NULL passed, use special string */
                        text.sz = __nullstring;
                    p = text.sz;
 hier --&gt;           while (i-- &amp;&amp; *p)
                        ++p;
                    textlen = (int)(p - text.sz);    /* length of the string */
                }
</code></pre>
<p>Fehlermeldung:</p>
<p>Unhandled exception at 0x102293fe (msvcr80d.dll) in test.exe: 0xC0000005: Access violation reading location 0xcccccccc.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278715</guid><dc:creator><![CDATA[ITAzubi23]]></dc:creator><pubDate>Fri, 04 May 2007 11:37:52 GMT</pubDate></item><item><title><![CDATA[Reply to VS streikt on Fri, 04 May 2007 12:11:52 GMT]]></title><description><![CDATA[<p>mach mal des</p>
<p>statt<br />
_stprintf_s(buf, _T(&quot;%s\%s&quot;), path, filter);</p>
<p>dieses<br />
_stprintf_s(buf, _T(&quot;%s\%s&quot;), path.c_str(), filter.c_str());</p>
<p>ich glaub das es mit den strings selber nicht geht</p>
<p>aber ich frag nochmal, warum so?</p>
<p>das ist besser</p>
<pre><code class="language-cpp">std::tstring strTemp;
strTemp = path + _T(&quot;\\&quot;) + filter;

TCHAR *strBuff = new TCHAR[(strTemp.length())+(sizeof(TCHAR))];
_tcscpy_s(strBuff, temp);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1278747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278747</guid><dc:creator><![CDATA[EXDW]]></dc:creator><pubDate>Fri, 04 May 2007 12:11:52 GMT</pubDate></item><item><title><![CDATA[Reply to VS streikt on Fri, 04 May 2007 12:30:04 GMT]]></title><description><![CDATA[<p>Danke für die Mühen und deine Geduld Evil. Es läuft jetzt! <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>
<p>Eine Sache noch kannst du mir den Vorteil von deinem Code gegenüber dem hier erklären?<br />
Ich verlier nämlich langsam den Überblick und versuchs jetzt so leicht wie möglich zu schreiben.</p>
<pre><code class="language-cpp">void dirsearch(const string&amp; path, const string&amp; filter) 
{ 
  HANDLE hFindFile; 
  WIN32_FIND_DATA wfd; 

  string buf; 

  buf = path + &quot;\\&quot; + filter;
  cout &lt;&lt; &quot;Es wird gesucht nach: &quot; &lt;&lt; buf &lt;&lt; endl;

 	hFindFile = FindFirstFile(buf.c_str(), &amp;wfd);   
	if (hFindFile != INVALID_HANDLE_VALUE) 
	{ 
	  do
	  {
		if ((wfd.dwFileAttributes &amp; FILE_ATTRIBUTE_DIRECTORY) == 0) 
              cout &lt;&lt; path &lt;&lt;&quot;\\&quot;&lt;&lt; wfd.cFileName &lt;&lt; endl;   
	  }while(FindNextFile(hFindFile, &amp;wfd) != 0); 

      FindClose(hFindFile); 
	} 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1278772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278772</guid><dc:creator><![CDATA[ITAzubi23]]></dc:creator><pubDate>Fri, 04 May 2007 12:30:04 GMT</pubDate></item><item><title><![CDATA[Reply to VS streikt on Fri, 04 May 2007 14:14:24 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-1819.html" rel="nofollow">rüdiger</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-3.html" rel="nofollow">Compiler- und IDE-Forum</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-4.html" rel="nofollow">WinAPI</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278832</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Fri, 04 May 2007 14:14:24 GMT</pubDate></item><item><title><![CDATA[Reply to VS streikt on Fri, 04 May 2007 14:16:36 GMT]]></title><description><![CDATA[<p>da gibts nicht viel zu erklaeren, du hast es ja so benutzt wie ich wollte - mein zusatz mit den copy hatte ich nur da ich nicht wusste ob du mit den .c_str() direkt arbeiten kannst oder ein TCHAR brauchst</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278834</guid><dc:creator><![CDATA[EXDW]]></dc:creator><pubDate>Fri, 04 May 2007 14:16:36 GMT</pubDate></item><item><title><![CDATA[Reply to VS streikt on Fri, 04 May 2007 14:54:11 GMT]]></title><description><![CDATA[<p>Mr Evil schrieb:</p>
<blockquote>
<pre><code class="language-cpp">std::tstring strTemp;
strTemp = path + _T(&quot;\\&quot;) + filter;

TCHAR *strBuff = new TCHAR[(strTemp.length())+(sizeof(TCHAR))];
_tcscpy_s(strBuff, temp);
</code></pre>
</blockquote>
<p>Du mischt hier aber Zeichensatz unabhängigen Code (siehe <em>TCHAR</em> und <em>_T</em>-Makro) mit ANSI-Only-Code (siehe <em>std::string</em>). Entweder Du definierst einen entsprechenden Typ der sich dem aktuellen Zeichensatz anpasst oder Du instantiierst die Klasse <em>std::basic_string</em> für den Typ <em>TCHAR</em> neu.</p>
<p>Des weiteren ist das <em>sizeof(TCHAR)</em> hier -in der Form- überflüssig:</p>
<p>Mr Evil schrieb:</p>
<blockquote>
<pre><code class="language-cpp">TCHAR *strBuff = new TCHAR[(strTemp.length())+(sizeof(TCHAR))];
</code></pre>
</blockquote>
<p>Es sollte heißen:</p>
<pre><code class="language-cpp">TCHAR* szBuffer = new TCHAR[strTemp.length() + 1];
</code></pre>
<p>Beim Operator <em>new</em> gibt man nur die Anzahl der benötigten Zeichen an, nicht die benötigten Bytes <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/1278856</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278856</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Fri, 04 May 2007 14:54:11 GMT</pubDate></item><item><title><![CDATA[Reply to VS streikt on Fri, 04 May 2007 14:55:03 GMT]]></title><description><![CDATA[<p>Mr Evil schrieb:</p>
<blockquote>
<p>da gibts nicht viel zu erklaeren, du hast es ja so benutzt wie ich wollte - mein zusatz mit den copy hatte ich nur da ich nicht wusste ob du mit den .c_str() direkt arbeiten kannst oder ein TCHAR brauchst</p>
</blockquote>
<p>Das sollte sich damit dann auch erklären <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1278857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1278857</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Fri, 04 May 2007 14:55:03 GMT</pubDate></item><item><title><![CDATA[Reply to VS streikt on Mon, 07 May 2007 05:52:43 GMT]]></title><description><![CDATA[<p>CodeFinder schrieb:</p>
<blockquote>
<p>Mr Evil schrieb:</p>
<blockquote>
<pre><code class="language-cpp">std::tstring strTemp;
strTemp = path + _T(&quot;\\&quot;) + filter;

TCHAR *strBuff = new TCHAR[(strTemp.length())+(sizeof(TCHAR))];
_tcscpy_s(strBuff, temp);
</code></pre>
</blockquote>
<p>Du mischt hier aber Zeichensatz unabhängigen Code (siehe <em>TCHAR</em> und <em>_T</em>-Makro) mit ANSI-Only-Code (siehe <em>std::string</em>). Entweder Du definierst einen entsprechenden Typ der sich dem aktuellen Zeichensatz anpasst oder Du instantiierst die Klasse <em>std::basic_string</em> für den Typ <em>TCHAR</em> neu.</p>
</blockquote>
<p>ehm, lies mal meine deklaration genau, dann siehst du das dort &quot;std::tstring&quot; definiert, ist - also nichts ansi only sondern multibyte und unicode faehig {o; - ich ging auch davon aus das die variablen path und filter entsprechend deklariert werden #gg</p>
<p>das mit den new {+1} hab ich in meinen source auch immer, hatte das nur falsch in erinnerung hier im topic, es moege mir veriehen sein {o;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280025</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280025</guid><dc:creator><![CDATA[EXDW]]></dc:creator><pubDate>Mon, 07 May 2007 05:52:43 GMT</pubDate></item></channel></rss>