Daraus schließe ich jetzt einfach mal (bitte korrigiert mich):
String[255] entspricht ShortString, String[1] bis String[255] verhalten sich wie schon beim alten Turbopascal. (Array of Char, bei dem an Position 0 die Längenangabe des tatsächliche genutzten Teils des Arrays steht.)
String ist, wie himitsu beschrieb, eine nullterminierte Zeichenfolge.
Der Typ (Type-Definition) ShortString entspricht String[255].
String[1] bis String[255] sind ShortString (DatenFormat-Definition).
Und LongString (AnsiString und UnicodeString) sowie WideString arbeiten mit Längen-Bytes/Integern, aber haben auch PChar-Charakteristiken drin, die aber vom String selber nicht verwendet werden.
WideString ist fast so wie LongString, nur etwas Einfacher und es wird von der OleAuth32.dll verwaltet. (
WinAPI und deren SpeicherManager)
Delphi-Quellcode:
var
S1, S2, S3: string;
S1 := 'abc'#0'def';
S2 := Copy(S1); // S2 := S1; ... damit auch wirklich der Inhalt kopiert wird, da LongStrings referenzverwaltet sind und sonst nur den Pointer, aber nicht den Inhalt kopieren
S3 := PChar(S1);
ShowMessage(Format('%d %d %d', [Length(S1), Length(S2), Length(S3)]));