tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
3
ZUGRIFFE
342
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    roxX0r roxX0r ist offline Mitglied Silber
    Registriert seit
    Sep 2005
    Beiträge
    52
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
     
    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
     

  2. #2
    kle-ben kle-ben ist offline Mitglied Brokat
    Registriert seit
    Oct 2004
    Beiträge
    492
    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
     
    Theorie ist Wissen, das nicht funktioniert.
    Praxis ist, wenn alles funktioniert und man weiß nicht warum

  3. #3
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    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.
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    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
    Geändert von MCoder (29.07.07 um 10:55 Uhr)
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  4. #4
    roxX0r roxX0r ist offline Mitglied Silber
    Registriert seit
    Sep 2005
    Beiträge
    52
    ok super mit dem Code funktioniert es wunderbar

    danke
     

Ähnliche Themen

  1. Dumme Frage
    Von igfas im Forum Visual Basic 6.0
    Antworten: 3
    Letzter Beitrag: 28.03.03, 11:43
  2. ganz dumme Frage :)
    Von schorschi im Forum Flash Plattform
    Antworten: 5
    Letzter Beitrag: 07.07.02, 11:03
  3. dumme frage ;)
    Von NiKeMaN im Forum Photoshop
    Antworten: 4
    Letzter Beitrag: 21.03.02, 13:57
  4. Mal ne ganz dumme Frage
    Von Mojohunter im Forum PHP
    Antworten: 6
    Letzter Beitrag: 26.12.01, 21:04
  5. mal ne dumme frage....
    Von Jack tha Ripper im Forum Flash Plattform
    Antworten: 3
    Letzter Beitrag: 28.05.01, 15:02