Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Der String (https://www.delphipraxis.net/13886-der-string.html)

Pseudemys Nelsoni 28. Dez 2003 16:03


Der String
 
hoi,

kann mir jemand erklären wie der typ(?) aufgebaut ist? wieso heisst er "string" und nicht "TString" und wie sieht der aufbau des typs aus? Da er nicht ordinal ist frag ich mich wie das ganze aussieht

Robert Marquardt 28. Dez 2003 16:30

Re: Der String
 
string ist Original-Pascal, deshalb nicht TString.
Damals war es ein ShortString also das erste Byte eine Laengenangabe.

Der moderne Delphi-String ist eigentlich eher eine Klasse.
Er wird immer dynamisch alloziiert (automatisch durch den Compiler).
Der Zeiger auf den String zeigt nicht auf den Anfang des alloziierten Bereichs sondern zwei Integer weiter.
dort steht ein C-String, also die Zeichen mit einem abschliessenden #0-Zeichen.
Die beiden verborgenen Integer enthalten die Laenge des strings (das was Length zurueckliefert) und
einen Referenzzaehler.
Bei einer Zuweisung
S2 := S1;
wird nur der referenzzaehler erhoeht. Erst wenn S2 veraendert wird, wird eine eigene Kopie angelegt.
Deshalb ist auch ein Zugriff wie S2[3] eher ein Zugriff auf eine property, denn es wird intern eine Funktion aufgerufen.
Das ist auch deshalnb noetig, da der Leerstring durch einen nil-Pointer repraesentiert wird.

Duffy 28. Dez 2003 16:30

Re: Der String
 
Hallo Pseudemys Nelsoni,
Zitat:

Zitat von Pseudemys Nelsoni
hoi,

kann mir jemand erklären wie der typ(?) aufgebaut ist? wieso heisst er "string" und nicht "TString" und wie sieht der aufbau des typs aus? Da er nicht ordinal ist frag ich mich wie das ganze aussieht

warum heißt das Pferd Pferd? Wenn es fliegen würde hieß es Fluft. Spaß bei Seite, daß mit dem String stammt aus alten Tagen. String steht für die Zeichenkette und wurde schon beim guten alten Pascal verwendet.

Ein Pascal String ist eigentlich nichts anderes als ein "array of Char", nur das man sich damals gedacht hat, man kommt mit 255 Zeichen aus und hat die Länge der Zeichenkette in Byte 0 des Strings versteckt. Da aber ein Byte nur den Maximalwert 255 annehmen kann, waren Pascal Strings schnell am Ende im Gegensatz zu C Strings. Die begannen bei dem Byte 0 und waren beendet wenn eine binäre 0 gefunden wurde.

Heute sieht das anders aus, mit Huge Strings, aber das kannst Du selber nachlesen …

bye
Claus

Pseudemys Nelsoni 28. Dez 2003 16:58

Re: Der String
 
danke für die ausführliche erklärung ;)

btw: ich fragte nicht wieso "string" "string" heisst sondern warum das "T" nicht davor steht, da es doch ein typ ist..

mfg ^^

Duffy 28. Dez 2003 17:00

Re: Der String
 
Hallo Pseudemys Nelsoni,
weil man es damals nicht so genau genommen hat?


bye
Claus

Robert Marquardt 28. Dez 2003 17:58

Re: Der String
 
Es heisst string, weil es ein keyword von Pascal ist.
Das T vor Typen ist sowieso nur Gewohnheit, die von Borland initiiert wurde.
Es hat keine semantische Bedeutung in Delphi.

choose 29. Dez 2003 15:03

Re: Der String
 
Zu Roberts gelungenen Ausführungen gibt es hier, im Abschnitt "long string types" neben einer hübschen Tabelle ;) auch einen Hinweis zur internen Implementierung von String-Konstanten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 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