Hallo, ich bins nochmal ! man will ja auch noch was dazulernen
nochmal wegen
Quelltext
string ist dynamisch, mit
string[32] deklarierst du einen string mit max 32 Zeichen statisch. Die deklaration hat aber nichts mit der länge des eigentlichen Strings zu tun
Quelltext
1: 2: 3: 4: 5: 6:
| Var password1,password2:string[32] ... password1:='Test'; password2:=''; len1:=length(password1); len2:=length(password2); |
len1 wird 4 sein, len2 wird 0 sein - aber deswegen nicht 32.
in dem ursprünglichen Code ist am Anfang password='' die länge also auch 0.
anschließend versuchst du in der Schleife die einzelnen Zeichen zu ändern z.B. password[1]:='X' - bewegst dich damit ja schon außerhalb des gültigen bereiches, da die länge des strings ja trotzdem 0 ist. Du bekommst nur deswegen keine fehlermeldung, weil du mit string[32] der Speicher schon da vorhanden ist, wäre passwort
string wäre niemals speicher reserviert wurden und da wird schon einer meckern. Und das z.B. password[33]:='X' nicht funktionert ist ja auch allen klar.
password[1] ist ja vielleicht noch ein wenig unklar, aber wie soll z.B. das funktionieren:
Quelltext
1: 2:
| password:=''; password[20]:='X'; |
wie soll jetzt password aussehen und welche länge soll er besitzen?
eine andere Variante wäre noch auf die variable password voll zu verzichten und wie luckie gleich mit result zu arbeiten:
Quelltext
1: 2: 3: 4: 5:
| Var i:integer; begin result:=pass; //Zuweisung for i:=1 to length(pass) do result[i] := ... //einzelne Zeichen ändern end; |
Wäre nett, wenn ich eine rückmeldung bekomme, ob meine überlegungen so richtig sind
Mfg Frank