Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String Char vergleich.... (https://www.delphipraxis.net/85922-string-char-vergleich.html)

Dragon27 6. Feb 2007 23:52


String Char vergleich....
 
Hallo,

bei folgendem Code bekomme ich eine Zugriffsverletzung... warum? Code ist eine Listbox.

Delphi-Quellcode:
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;
Danke für Die Mühe!!

Luckie 6. Feb 2007 23:58

Re: String Char vergleich....
 
Lass mal den Cast nach char weg.

Dragon27 7. Feb 2007 00:01

Re: String Char vergleich....
 
Hallo,

geht auch nicht :-/


Danke ;-)

Luckie 7. Feb 2007 00:05

Re: String Char vergleich....
 
Delphi-Quellcode:
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;
Geht. Der Fehler muss wo anders liegen.

popo2006 7. Feb 2007 00:37

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

Muehle 7. Feb 2007 07:07

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 !!!!

Muetze1 7. Feb 2007 08:24

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.

alzaimar 7. Feb 2007 08:40

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 19:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz