Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - String als Characterarray[erledigt]


opfer.der.genauigkeit - Di 09.12.03 11:01
Titel: String als Characterarray[erledigt]
Eine ganz einfache Frage.

Gegeben String:
S:= 'Test';

Mit S[0] bekomme ich als Ergebnis #0.
Bei S[1] bekomme ich dann 'T'.
Und bei S[5] krieg ich wieder n #0.

Also ist #0 sowas wie n Delimiter.
Wozu verwendet Delphi den??

Wenn ich den String nämlich als PChar nehm, hab ich mein Characterarry und kann beim Index 0 meinen ersten Buchstaben ('T') als Rückgabewert bekommen.


ErnestoChe - Di 09.12.03 11:16

Hi,

die Null am Ende kennzeichnet das Ende des Strings. Das nennt man dann Nullterminierung. Ein normaler Delphistring speichert zudem an Position Null, also s[0], die Länge des Strings. Ein PChar dagegen nicht, ist aber ein Zeiger auf einen nullterminierten String.

Mach dich mal am besten in deiner Delphi-Hilfe über diese Begriffe (String, Ansistring, PChar, PWideChar etc.) schlau. Da ist das eigentlich ganz gut beschrieben.

MFG

- Ernesto -


Motzi - Di 09.12.03 11:16

Delphi unterstützt 2 Stringtypen - die ShortStrings und die sogenannten LongStrings (AnsiStrings). ShortString entspricht dem von Pascal bekannten 255-Zeichen String der im ersten Zeichen (mit Index 0) die Länge des Strings speichert. Die "neuen" (seit Delphi 2) LongStrings sind (genauso wie PChars) nur Zeiger auf eine Speicherstelle an der die Zeichenkette liegt und sie sind (ebenfalls genauso wie PChars) nullterminiert, dh der String wird beim ersten Vorkommen des Nullzeichens (#0) als beendet betrachtet. Wichtig dabei: das erste Zeichen eines String hat den Index 1 (und nicht 0!!) und daher hat eben das letzte Zeichen des Strings auch den Index Length(String). Das abschließende Nullzeichen wird von Delphi immer intern mitgeführt, um das muss man sich also nicht kümmern.

Abschließend sollte noch gesagt werden, dass Delphi VOR der eigentlichen Zeichenkette noch 2 32Bit Zähler mitführt, nämlich einen in dem die Länge des Strings gespeichert wird und einen Referenzzähler. Details darüber würden hier jetzt den Rahmen sprengen, aber ich schreibe gerade ein Tutorial zu den internen Details des String-Handlings von Delphi das ich dann natürlich hier veröffentlichen werde...


opfer.der.genauigkeit - Di 09.12.03 11:19

Fein fein.

Danke für die Antworten