![]() |
String ersetzen/ Zugriffsverletzung
Morgen liebe Community,
tut mir leid falls ich eine ungeschickte Anfängerfrage stelle, allerdings habe ich neulich angefangen in Delphi zu programmieren und wolle mit einem kleinen Programm starten, in diesem Fall: Hangman. Dabei habe ich in einem Edit-Feld die Länge des gesuchten Wortes in _ Zeichen Ein Buchstabe wird eingegeben und das Zeichen soll durch den Buchstaben ersetzt werden. Das Kompilieren ist kein Problem, doch wenn ich auf den Button klicke der die Funktion ausführen soll bekomme ich folgende Fehlermeldung: "Zugriffsverletzung bei Adresse 005115DE in Modul 'ProjectHangman.exe'. Schreiben von Adresse 00000000." Die Variablen habe ich folgender Maßen deklariert:
Delphi-Quellcode:
WortLaenge ist eine globale Variable
var buchstabenLaenge : integer;
var buchstabe : string; var I : integer; var count : integer; var lösung : string Der Fehler findet in dieser Schleife statt:
Delphi-Quellcode:
Konnte mit Google den Fehler nicht finden^^
for I := 1 to wortLaenge do
begin if eingabe1[count]=buchstabe[1] then begin lösung[count]:=buchstabe[1]; end; count := count +1; end; Wenn ich den Debugger benutze, werde ich an folgende Stelle gebracht
Delphi-Quellcode:
Thread-Start: Thread-ID: 1728. Prozess ProjectHangman.exe (1284)
begin
Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1, Form1); Application.Run; end. Kann damit nichts anfangen :( Wärt ihr so nett mich aufzuklären?^^ |
AW: String ersetzen/ Zugriffsverletzung
Delphi-Quellcode:
Deine Schleifevariable heißt I
for I := 1 to wortLaenge do
begin if eingabe1[count]=buchstabe[1] then begin lösung[count]:=buchstabe[1]; end; count := count +1; end; Du nutzt aber das nicht initialisiert count um auf einzelne Zeichen Deines Strings zuzugreifen. Grüße Klaus |
AW: String ersetzen/ Zugriffsverletzung
meinst du ich sollte count durch I ersetzen?
in dem fall bekomme ich allerdings die gleiche fehlermeldung |
AW: String ersetzen/ Zugriffsverletzung
Zeig doch mal die ganze Methode. Ist Buchstabe initialisiert, und wieso ist das ein String, würde Char nicht genügen?
|
AW: String ersetzen/ Zugriffsverletzung
Delphi-Quellcode:
Welche Delphi-Version nutzt Du >= 2009 dann hat Dein String pro Buchstaben zwei 2Byte.for i := 1 to length(eingabe1) do begin if eingabe1[i]=buchstabe[1] then begin lösung[i]:=buchstabe[1]; end; end; Dann könntest Du auf AnsiString ausweichen. Eingabe1 ist ein String - oder ist es eine Edit-Componente? Grüße Klaus |
AW: String ersetzen/ Zugriffsverletzung
Hast du Count initialisiert?
Setz mal vor der Schleife Count auf 1! |
AW: String ersetzen/ Zugriffsverletzung
Zitat:
|
AW: String ersetzen/ Zugriffsverletzung
was noch fehlt ist die Länge von Lösung zu setzen.
Delphi-Quellcode:
@DeddyH: Ja, da hast Du Recht.
setLength(Lösung,length(Eingabe1));
Grüße Klaus |
AW: String ersetzen/ Zugriffsverletzung
anscheinend hab ich noch viel zu lernen ;)
setLength(Lösung,length(Eingabe1)); wo soll ich das einsetzen? in der schleife? |
AW: String ersetzen/ Zugriffsverletzung
Wie ich schon sagte:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz