Ganz dumme char[] frage ...

roxX0r

Mitglied
Hallo..
ich würde gerne wissen, wieso mein Code nicht das tut, was er soll. Ich möchte wissen, ob in dem char Array ein "Good" drinsteht, aber er spruckt mir ganz komische sachen aus.


Code:
BOOL EnumWindowsProc(HWND hWnd, long lParam){
      char Buff[255];
      GetWindowText(hWnd, Buff, 254);
      int i;
	  for (i = 0; i < 254; i++){	  
	      if ((Buff[i] == 'G') && (Buff[i+1] == 'o') && (Buff[i+2] == 'o') && (Buff[i+3] == 'd') ) {
		  printf("%d ",(int)hWnd);
		  break;
		  }
	  
	  }
      return TRUE;
}

Bedeutung: Ich möchte, dass alle handles durchgelaufen werden, und die Handles ausgegeben werden, in deren TitleBar ein "Good" drinsteht... und zwar NUR diese. Er gibt mir immoment diese aus, dazu aber manchmal auch noch ganz andere und manchmal nur zum Teil alle mit "Good" ...
Oder gibts vielleicht eine bessere Möglichkeit, dies zu machen?

danke für die hilfe
alex
 
Hi,
dein Code sollte eigentlich garnicht funktionieren sondern zu einem
Speicherzugriffsgfehler führen. Wenn dein i 253 ist greifst du auf die
Stelle [ i + 3 ] also 256 zu. Auserdem schaust du dir das ganze Feld
an obwohl du nur bis zum \0 Zeichen laufen brauchst.Was danacht
steht ist undefiniert solange du es nicht anderst initialisiert hast. Könnte
zum Beispiel sein das da irgendwo ein Good steht.

Gruß Benny
 
Hallo,

wie mein Vorgänger schon sagte: Immer nur die tatsächliche Stringlänge überprüfen (strlen) und nicht über das Ende des Buffers hinausschießen.
Für den Stringvergleich ist es effizienter, die entsprechenden Vergleichsfunktionen zu verwenden. Außerdem ist man damit flexibler, wenn mal ein anderer String gesucht werden soll.
C++:
char cBuffer[] = "12345blabla--good--6789blabla";

const char cFind[] = "good";
int nMaxPos = strlen(cBuffer) - strlen(cFind);
bool bFound = false;

for( int nPos = 0; nPos < nMaxPos; nPos++ )
{
    if( strncmp(cBuffer + nPos, cFind, strlen(cFind)) == 0 )
    {
        bFound = true;  // Gefunden 
        break;
    }
}
Gruß
MCoder
 
Zuletzt bearbeitet:
Zurück