Entwickler-Ecke

Sonstiges (Delphi) - laufzeitfehler bei einem einfachen entschlüsslungsalgo...


g1o2k4 - Sa 26.08.06 01:04
Titel: laufzeitfehler bei einem einfachen entschlüsslungsalgo...
nabend

hab ich nen fehler gemacht oder woran liegts , dass ich immer nen fehler bekomm ?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Text := '';
end;

procedure TForm1.Button1Click(Sender: TObject);
var s:string;
    i:integer;
begin
  s:=Memo1.Text;
  for i:=1 to length(s) do
  begin
    s[i]:=char(strtoint(Edit1.text) Xor Ord(s[i]));
  end;
  Memo1.text := s;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
    s:string;
    x:integer;
begin
  s := Memo1.text;
    for i:=0 to 255 do
    begin
      s[i]:=char(i Xor ord(s[i]));
      if s='test' then
      exit;
    end;
    Memo1.text := s;
end;


was ist der befehl dafür aus einer schleife rauszugehen und diese als erledigt zu betrachten ?

mfg g1o


Martok - Sa 26.08.06 01:38

Du müsstest schon verraten, welcher Fehler wo auftritt. Laufzeitfehler(und das nur im Titel) ist da sicherlich wenig hilfreich.

Der gesuchte Befehl heißt break; Hätte dir die Delphi-Hilfe verraten können, einfach nach 'exit' suchen und dann bei 'Siehe auch'.

Falls das jetzt etwas Oberlehrerhaft klang, so wars nicht gemeint ;)

HTH, Martok


g1o2k4 - Sa 26.08.06 08:56

also als fehler kommt:
"Im Projekt ....exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 004028F5 in Modul ....exe. Lesen von Adresse 00C9FFFC."

ich hab den code allerdings noch etwas modifiziert:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
procedure TForm1.Button1Click(Sender: TObject);
var s:string;
    i:integer;
begin
  s:=Memo1.Text;
  for i:=1 to length(s) do
  begin
    s[i]:=char(strtoint(Edit1.text) Xor Ord(s[i]));
  end;
  Memo1.text := s;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i,l,x:integer;
    s:string;
    t:string;
begin
  s := Memo1.text;
    for i:=0 to 255 do
    begin
      for l:=0 to length(s) do
      begin
        s[l]:=char(i Xor ord(s[l]));
      end;
      t := s;
      for l:=0 to length(s) do
      begin
      s[l]:=char(i Xor Ord(s[l]));
      end;
      if t='test' then
      break;
    end;
    Memo1.text := t;
end;


Keldorn - Sa 26.08.06 09:07


Delphi-Quelltext
1:
2:
3:
      for l:=0 to length(s) do  
      ...
      for l:=0 to length(s) do

Strings beginnen ab 1 zu zählen, nicht ab 0.

Mfg Frank


mkinzler - Sa 26.08.06 09:11


Delphi-Quelltext
1:
  for l:=0 to length(s)-1 do                    

Zitat:
Strings beginnen ab 1 zu zählen, nicht ab 0.
Und gehen daher bis Länge -1


Keldorn - Sa 26.08.06 11:50

Du verwechselst da was.


g1o2k4 - Sa 26.08.06 17:52

jo stimmt. es ist wie keldorn es sagt. hab alles ausprobiert und schrittweise kompiliert und es hängt wirklich daran, dass strings bei 1 zu zählen beginnen.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
// verschlüsseln
procedure TForm1.Button1Click(Sender: TObject);
var s,t:string;
    i:integer;
begin
  s:=Memo1.Text;
  t :=s[1];

  for i:=1 to length(s) do
  begin
    s[i]:=char(strtoint(Edit1.text) Xor Ord(s[i]));
  end;
  Memo1.text := s;
end;

//entschlüsseln
procedure TForm1.Button2Click(Sender: TObject);
var i,l,x:integer;
    s:string;
    t:string;
begin
    for i:=0 to 255 do
    begin
        s := Memo1.text;
        label1.caption := inttostr(i);
        for l:=1 to length(s) do
          s[l]:=char(i Xor ord(s[l]));

          //for l:=1 to length(s) do
          //s[l]:=char(i Xor Ord(s[l]));

      if s='test' then
        break;
    end;
    Memo1.text := s;
end;


danke für die hilfe ! g1o