Poblem bei strstr bzw. strcpy



  • Hallo,
    Ich habe bei folgendem Quelltext ein Problem (wahrscheinlich strstr oder strcpy). Ich habe ein Formular auf dem eine ListBox, zwei Edits und ein Button voranden sind. Sobald man auf den Button klickt, wird ein neuer Eintrag in die ListBox hinzugefügt, und zwar der Inhalt von Edit2->Text + ": " + Edit1->Text. In der ListBox werden Homepages gespeichert. Z.B. könnte in einer Zeile der ListBox stehen: "C++ Forum: [url=http://www.c-plusplus.net".]www.c-plusplus.net".[/url] Bevor jedoch durch klick auf Button1 ein neuer Eintrag hinzugefügt werden soll, soll erst überprüft werden, ob die Homepage, die eingetragen werden soll schon irgendwo in der ListBox vorhanden ist:

    char *Suche2; int Enthalten;
    
    for (int i=0; i < ListBox1->Items->Count; i++) 
    {
    
            char *ch1 = new char[ListBox1->Items->Strings[i].Length()+1];
        strcpy(ch1, ListBox1->Items->Strings[i].c_str());    /*z.B.: ch1 = "C++ Forum:  [url=http://www.c-plusplus.net"]www.c-plusplus.net"[/url]  */
    
            char *ch2 = new char[Edit1->Text.Length()+1]; 
        strcpy(ch2, Edit1->Text.c_str());  /*z.B.: ch2 = "www.c-plusplus.net"*/
    
            Suche2 = strstr(ch1, ch2); /*überprüfe ob "www.c-plusplus.net" in "C++ Forum:  [url=http://www.c-plusplus.net"]www.c-plusplus.net"[/url]  vorhanden ist.*/
    
            if (Suche2 == ch2) /*wenn ch2 in ch1 gefunden, Fehlermeldung ausgeben.*/
        { 
            Application->MessageBox("Eintrag schon vorhanden!", "Problem bei Eintragung", 16+0); 
            Enthalten++; //Einthalten = wie oft gefunden.
        }
    
        delete ch1;
        delete ch2;
    }
    
    if (Enthalten == 0) {          //wenn nicht gefunden, dann
    //neuen Eintrag anlegen
    }
    

    Das Problem ist nur, dass das Programm nie die Fehlermeldung ausgibt.

    Danke für die Hilfe!

    Grüße,
    Andist



  • Oh Entschuldigung hab mich hier im Eintrag vertippt:
    bei MessageBox: 0+16 und nicht 16+0.

    Das ist aber nicht das Problem. Geht leider immer noch nicht.



  • Sieh dir einfach mal zur Laufzeit den Inhalt der verschiedenen Variablen an.

    Aber was soll überhaupt dieser "Unsinn" mit strcpy und strstr? Wozu gibt es denn die AnsiString-Methoden?

    for (int i = 0; i < ListBox1->Count; i++)
      {
        if (ListBox1->Items->Strings[i].Pos(Edit1->Text))
        {
          ShowMessage("Schon vorhanden");
          i = ListBox1->Count; // Abbruch
        }
      }
    


  • Stimmt. So viel einfacher und funktioniert noch besser!

    Danke!


Anmelden zum Antworten