<?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[EnumWindows titel wird falsch übergeben (Vector)]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich stehe derzeit vor folgendem Problem:</p>
<p>mit dem unten gepostetem Code möchte ich alle Fenster die EnumWindows findet, in eine Vector liste übertragen (da die Größe nicht fix ist, bin ich gezwungen den Vector zu benutzen..).</p>
<p>Jedoch füllt der push_back den Vector mit leeren Zeichenfolgen auf (oder Sonderzeichen, hängt von buf-Größe ab).. dennoch ist der buf string eigentlich nicht leer (siehe cout&lt;&lt;buf&lt;&lt;endl)..</p>
<p>Wie kann ich die Übergabe dieser leeren Zeichenfolgen verhindern, bzw. den Fenstertitel korrekt in den Vector einfügen ?</p>
<p>Danke im Voraus</p>
<p>mcOocr ~</p>
<pre><code>vector&lt;char*&gt; list;
BOOL CALLBACK EnumWindows(HWND hWnd, LPARAM lParam) {
	if(IsWindowVisible(hWnd)&amp;&amp;GetParent(hWnd) == NULL) {
	   	char buf[50];
	   	GetWindowText(hWnd, buf, 50);
	 	if(strlen(buf) != NULL)
	 		cout&lt;&lt;buf&lt;&lt;endl;
	 		list.push_back(buf);
	} return true;
}

int main(int argc, char* argv[])
{
	int i;
	EnumWindows(EnumWindows, NULL);
	for(i=0; i&lt;list.size(); i++) 
		cout&lt;&lt;list[i]&lt;&lt;endl;	
	system(&quot;PAUSE&quot;);
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/274434/enumwindows-titel-wird-falsch-übergeben-vector</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 14:16:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/274434.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 26 Sep 2010 08:57:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to EnumWindows titel wird falsch übergeben (Vector) on Sun, 26 Sep 2010 09:00:37 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich stehe derzeit vor folgendem Problem:</p>
<p>mit dem unten gepostetem Code möchte ich alle Fenster die EnumWindows findet, in eine Vector liste übertragen (da die Größe nicht fix ist, bin ich gezwungen den Vector zu benutzen..).</p>
<p>Jedoch füllt der push_back den Vector mit leeren Zeichenfolgen auf (oder Sonderzeichen, hängt von buf-Größe ab).. dennoch ist der buf string eigentlich nicht leer (siehe cout&lt;&lt;buf&lt;&lt;endl)..</p>
<p>Wie kann ich die Übergabe dieser leeren Zeichenfolgen verhindern, bzw. den Fenstertitel korrekt in den Vector einfügen ?</p>
<p>Danke im Voraus</p>
<p>mcOocr ~</p>
<pre><code>vector&lt;char*&gt; list;
BOOL CALLBACK EnumWindows(HWND hWnd, LPARAM lParam) {
	if(IsWindowVisible(hWnd)&amp;&amp;GetParent(hWnd) == NULL) {
	   	char buf[50];
	   	GetWindowText(hWnd, buf, 50);
	 	if(strlen(buf) != NULL)
	 		cout&lt;&lt;buf&lt;&lt;endl;
	 		list.push_back(buf);
	} return true;
}

int main(int argc, char* argv[])
{
	int i;
	EnumWindows(EnumWindows, NULL);
	for(i=0; i&lt;list.size(); i++) 
		cout&lt;&lt;list[i]&lt;&lt;endl;	
	system(&quot;PAUSE&quot;);
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1957569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957569</guid><dc:creator><![CDATA[Ultrablack]]></dc:creator><pubDate>Sun, 26 Sep 2010 09:00:37 GMT</pubDate></item><item><title><![CDATA[Reply to EnumWindows titel wird falsch übergeben (Vector) on Sun, 26 Sep 2010 09:06:45 GMT]]></title><description><![CDATA[<p>Dein vector speichert Zeiger auf Zeichenketten. Zeichenketten, die nach Verlassen des if Blocks nicht mehr existieren.<br />
Entweder du forderst für die Zeichenketten dynamisch Speicher an, statt</p>
<pre><code class="language-cpp">char buf[50];
</code></pre>
<pre><code class="language-cpp">char* buf = new char[50]
</code></pre>
<p>und löschst am ende alle Zeichenketten über die Zeiger im vector</p>
<pre><code class="language-cpp">delete list[i];
</code></pre>
<p>Oder du machst es besser und speicherst std::strings im vector.</p>
<pre><code class="language-cpp">std::vector&lt;std::string&gt; list;
list.push_back(buf);
</code></pre>
<p>list ist übrigens ein blöder Name (std::list).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1957571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957571</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Sun, 26 Sep 2010 09:06:45 GMT</pubDate></item><item><title><![CDATA[Reply to EnumWindows titel wird falsch übergeben (Vector) on Sun, 26 Sep 2010 09:08:38 GMT]]></title><description><![CDATA[<p>buf ist nur im Scope der Funktion EnumWindows(..) gültig.<br />
Du speicherst in list eine Adresse, auf nicht mehr gültigen Speicher.</p>
<p>Am einfachsten benutzt Du einfach std::string um Strings zu speichern.</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;vector&gt;

// ...

using namespace std;

vector&lt;std::string&gt; list;

// ...

BOOL CALLBACK EnumWindows(HWND hWnd, LPARAM lParam)
{
   // ...

   list.push_back(std::string(buf));

   // ...
}
</code></pre>
<p>BTW:<br />
- Den Return Wert von strlen(..) gibt keinen Zeiger zurück. NULL ist daher nicht angebracht.<br />
- Ausserdem würde ich die Callback Funktion nicht EnumWindows(..) nennen, das ist verwirrend. Nenn sie z.B. EnumWindowsCallback(..) oder ähnlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1957572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957572</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sun, 26 Sep 2010 09:08:38 GMT</pubDate></item><item><title><![CDATA[Reply to EnumWindows titel wird falsch übergeben (Vector) on Sun, 26 Sep 2010 09:43:19 GMT]]></title><description><![CDATA[<p>Danke für die schnellen Antworten, hat geholfen. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1957582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957582</guid><dc:creator><![CDATA[Ultrablack]]></dc:creator><pubDate>Sun, 26 Sep 2010 09:43:19 GMT</pubDate></item></channel></rss>