Buchempfehlung
Visual Basic 6 Kochbuch
Visual Basic 6 Kochbuch
Viele praktische Tipps zum Programmieren mit Visual Basic 6, die sich oft auch auf FB übertragen lassen. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Referenz - STRING (Datentyp)

Referenz-Navigation

 

Typ: Datentyp

Ein STRING ist eine Zeichenkette, die einen zusammenhängenden Text, einzelne Wörter, Buchstaben oder sonstige Zeichen enthalten kann; auch Leerstrings (also Strings ohne jeglichen Inhalt) sind möglich.
"Hallo!" ist ein Beispiel für einen String.
In FreeBASIC werden Strings immer von "Anführungszeichen" eingerahmt. Sollen in Ihrer Zeichenkette Anführungszeichen vorkommen, so können Sie dies auf verschiedene Weise erreichen:

Man unterscheidet zwei Arten von Strings:

Var-length-Strings werden dynamisch verwaltet; ihre Größe im Speicher hängt von der Länge des Strings ab. Sie werden durch diese Zeile erstellt:

DIM variable AS STRING

Strings variabler Länge werden intern über einen Descriptor (dt: Bezeichner) gehandhabt. Dieser Bezeichner enthält einen Pointer zum eigentlichen String und der Länge des Strings.
BefehlsreferenzeintragVARPTR gibt einen Pointer auf den Bezeichner zurück, während BefehlsreferenzeintragSTRPTR einen Pointer auf den tatsächlichen String zurückgibt.
Am Ende eines Strings wird automatisch ein BefehlsreferenzeintragCHR(0) angehängt. Dadurch kann bei der Übergabe an externe Funktionen auf zeitaufwändiges Kopieren verzichtet werden.
Der Bezeichner eines Strings variabler Länge enthält drei Dinge: Die Adresse der Zeichenkette, ihre Länge und der für die Zeichenkette reservierte Speicherplatz. Aus diesem Grund gibt BefehlsreferenzeintragSIZEOF(STRING) 12 (bei einem 32bit-Compiler) bzw. 24 (bei einem 64bit-Compiler) aus. Dieser Wert ergibt sich durch eine Pointer-Adresse zu 4 bzw. 8 Bytes und zwei BefehlsreferenzeintragINTEGER, ebenfalls 4 bzw. 8 Bytes groß. Dass die Länge der Zeichenkette und der reservierte Speicherplatz in der Regel nicht übereinstimmen, liegt ganz einfach daran, dass dadurch nicht bei jeder Änderung des String-Inhalts ein kostenintensives Reservieren und Umkopieren des Speichers erforderlich ist.

Achtung: Bei der Nutzung von variablen Strings sollte auch der Artikel zu BefehlsreferenzeintragBYVAL (Schlüsselwort) gelesen werden, da die Nutzung von BYVAL in Parameter-Deklarationen von BefehlsreferenzeintragFunktionen oder BefehlsreferenzeintragSUB-Routinen zu Problemen führen kann.

Ein fixed-length-String verhält sich wie ein QB-String fester Länge. Er wird folgendermaßen erstellt:

DIM variable AS STRING * Länge

Länge ist dabei eine Konstante oder ein einfacher Ausdruck; Länge darf KEINE Variablen enthalten.
Strings fester Länge haben keinen descriptor und werden nicht redimensioniert, wenn sich die Länge der enthaltenen Zeichenkette ändert. Wenn einem String fester Länge eine Zeichenkette zugewiesen werden soll, die größer ist als die zuvor festgelegte Länge des Strings, dann wird sie - wie in QB - am rechten Ende abgeschnitten, so dass sie in die String-Speicherstelle passt.
Soll also

1234567890

in einem String mit fester Länge 5 gespeichert werden, enthält der String anschließend die Zeichenkette

12345

Ein String - egal ob fixed oder var length - kann bei einem 32bit Compiler bis zu 2.147.483.648 Zeichen lang sein, bei 64bit bis zu 9.223.372.036.854.775.808; dies entspricht einer Datenmenge von 2 GB bzw. 8.388.607 TB.

Alle Strings können indiziert werden. Das bedeutet, man kann den ASCII-Code jedes beliebigen Zeichens innerhalb eines Strings über seinen Index ermitteln. Dazu verwendet man die Syntax

ASCII = StringVariable[n]

wobei 'n' die Nummer des Zeichens im String minus eins ist. Das erste Zeichen eines Strings wird also über StringVariable[0] indiziert. Das letzte Zeichen wäre 'BefehlsreferenzeintragLEN(StringVariable) - 1'. Werden Bereiche außerhalb dieser Werte verwendet, kann das zu schweren Fehlern führen.

Beispiel:

DIM a AS STRING, b AS STRING * 11  ' Strings erstellen
a = "hello World"   ' und befüllen
b = a
PRINT a   ' auf dem Bildschirm ausgeben
PRINT b
PRINT

DIM aa AS STRING PTR, ab AS byte PTR  ' Zwei Pointer zur Analyse...
aa = @a                               ' die Adresse des Bezeichners
ab = cptr(byte ptr, @b)               ' die Adresse des ersten Zeichens
PRINT aa                              ' Adressen ausgeben
PRINT ab
PRINT
PRINT *ab                             ' 104, ASCII-Code von h, dem
                                      ' ersten Zeichen im String
PRINT CHR(*ab)                        ' h, das erste Zeichen im String
PRINT
PRINT PEEK(UINTEGER, aa)              ' beide Male die Adresse der
PRINT STRPTR(a)                       ' eigentlichen Zeichenkette
PRINT
PRINT PEEK(UBYTE, PEEK(UINTEGER, aa)) ' Beide Male das erste Zeichen des
PRINT a[0]                            ' var-length-Strings als ASCII...
PRINT
PRINT CHR(PEEK(UBYTE, PEEK(UINTEGER, aa)))  ' und als Zeichen.
PRINT CHR(a[0])
SLEEP

Ausgabe:

hello World
hello World

3216641896
3216641884

 104
h

166291024
166291024

104
104

h
h

Unterschiede zu QB:

Siehe auch:
BefehlsreferenzeintragSIZEOF, BefehlsreferenzeintragVARPTR, BefehlsreferenzeintragSTRPTR, BefehlsreferenzeintragCAST, BefehlsreferenzeintragCHR, BefehlsreferenzeintragASC, BefehlsreferenzeintragSTR, BefehlsreferenzeintragVAL, BefehlsreferenzeintragBIN, BefehlsreferenzeintragHEX, BefehlsreferenzeintragOCT, BefehlsreferenzeintragSPACE, BefehlsreferenzeintragINPUT (Funktion), BefehlsreferenzeintragDIM, BefehlsreferenzeintragZSTRING, BefehlsreferenzeintragWSTRING (Datentyp), BefehlsreferenzeintragDatentypen, BefehlsreferenzeintragDatentypen und Deklarationen, BefehlsreferenzeintragString-Funktionen


Zusätzliche Informationen und Funktionen
  • Der Referenzeintrag wurde am 04.08.2007 von Redakteurnemored angelegt.
  • Die aktuellste Version wurde am 26.07.2015 von Redakteurnemored gespeichert.
  Versionen Versionen