Was habe ich hier falsch gemacht :(



  • Hallo, beim folgenden Code...

    for(int zeichen=0; zeichen<Edit1->Text.Length(); zeichen++)
      {
      if(Edit1->Text[zeichen]=='+')
        {
        iZ1=StrToInt(Edit1->Text.SubString(1,zeichen-1));
        iZ2=StrToInt(Edit1->Text.SubString(zeichen+1,Edit1->Text.Length()));
        Panel1->Caption=iZ1+iZ2;
        }
      }
    

    ...kommt folgende Fehlermeldung beim Ausführen:

    Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 40006A2F in Modul 'rtl60.bpl'. Lesen von Adresse 1875FF19'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
    

    Hoffe mir kann einer helfen
    Danke im Voraus bye



  • fang deine Schleife mal bei 1 an...

    for(int zeichen = 1; zeichen < Edit1->Text.Length(); zeichen++){
      if( Edit1->Text[zeichen] == '+'){
        iZ1 = StrToInt(Edit1->Text.SubString(1, zeichen-1));
        iZ2 = StrToInt(Edit1->Text.SubString(zeichen+1, Edit1->Text.Length() ));
        Panel1->Caption = IntToStr(iZ1+iZ2); //geht auch ohne IntToStr, gefällt mir persönlich aber besser... 
      }
    }
    

    jetzt sollte die OutOfIndex-Meldung verschwunden sein...



  • ach logisch 😣
    danke



  • sukkkkkkkeerrr schrieb:

    ach logisch

    Ist es das? Warum?



  • Joe_M. schrieb:

    sukkkkkkkeerrr schrieb:

    ach logisch

    Ist es das? Warum?

    Weil's den Index 0 bei einem AnsiString nicht gibt.



  • Hallo

    Joe wollte damit ausdrücken, das es in der C/C++ Welt sehr unüblich, wenn nicht sogar gegen den Standard ist, das ein Array nicht mit dem Index 0 beginnt.
    Auch in der VCL ist AnsiString das einzigste Array mit dieser EIgenschaft.

    bis bald
    akari


Anmelden zum Antworten