![]() |
String Char vergleich....
Hallo,
bei folgendem Code bekomme ich eine Zugriffsverletzung... warum? Code ist eine Listbox.
Delphi-Quellcode:
Danke für Die Mühe!!
procedure TmainF.analyse_Code();
var i:integer; Linetext:String; begin for i:=0 to Code.Count-1 do begin Linetext:=Code.Items[i]; Linetext:=trim(Linetext); //Linetext auf Variable Prüfen if Linetext[1]=char('$') then begin //!!!! Zugriffsverletzung !!!! showmessage('Variable!!'); end; //:::_____:::: end; end; |
Re: String Char vergleich....
Lass mal den Cast nach char weg.
|
Re: String Char vergleich....
Hallo,
geht auch nicht :-/ Danke ;-) |
Re: String Char vergleich....
Delphi-Quellcode:
Geht. Der Fehler muss wo anders liegen.
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer; s: string; begin for i := 0 to ListBox1.Count - 1 do begin s := ListBox1.Items[i]; if s[1] = 'k' then begin ShowMessage('ajfsk'); end; end; end; |
Re: String Char vergleich....
Ist das erste Item in der Listbox vielleicht ein leerer String?
Lass Dir mal ausspucken, was nach dem trim noch übrig ist. mfg |
Re: String Char vergleich....
Ich habs gerade ausprobiert :
str1:='abc'; str2:=str1[1]; das funktioniert : jedoch str1:=''; str2:=str1[1]; bringt eine Fehlermld. . Delphi kennt halt kein '/0' wie z.B. C !!!! |
Re: String Char vergleich....
Auch Delphi hat ein \0 am Ende von AnsiStrings - aber dieser ist implizit angegeben und nicht durch die Zeichenindizierung ansprechbar. Wenn ein leerer String übergeben wird, dann gibt es nunmal kein gültiges Zeichen. In C hast du wahrscheinlich konstante Arrays genutzt und dort kannst du dann auch ohne Probleme die Einträge durchgehen - egal ob genutzt oder nicht. In Delphi ist dies aber eine dynamische Struktur. Bei std::string hast du auch nicht ein solches Verhalten wie du es hier erwartet hattest. Auch dort ist implizit das Nullbyte vorhanden, aber nicht als Index zugreifbar.
|
Re: String Char vergleich....
Ist es nicht so, das der leere String intern durch einen nil-Pointer repräsentiert wird? Dann ist es logisch, das die 'Dereferenzierung' durch Zugriff auf das 1.Zeichen eine Zugriffsverletzung ergibt.
Metaphysisch gesehen scheitert Delphi an der Frage nach "dem Anfang des Nichts" :roteyes: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 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-2025 by Thomas Breitkreuz