Autor Beitrag
opfer.der.genauigkeit
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754
Erhaltene Danke: 1



BeitragVerfasst: Di 09.12.03 11:01 
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.

_________________
Stellen Sie sich bitte Zirkusmusik vor.


Zuletzt bearbeitet von opfer.der.genauigkeit am Di 09.12.03 11:19, insgesamt 1-mal bearbeitet
ErnestoChe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: 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...

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
opfer.der.genauigkeit Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754
Erhaltene Danke: 1



BeitragVerfasst: Di 09.12.03 11:19 
Fein fein.

Danke für die Antworten

_________________
Stellen Sie sich bitte Zirkusmusik vor.