Null-terminiert

Aus DGL Wiki
Wechseln zu: Navigation, Suche

Strings in der Programmiersprache C sind Felder (Arrays), die Zeichen (Char) enthalten. Das Ende der Zeichenkette ist markiert mit dem Endezeichen "\0".

Darstellungsmöglichkeiten von Strings

ShortString in Delphi

5,"Hallo"

Hier bedeutet der Wert 5, dass der String 5 Zeichen lang ist. Der Wert 5 wird hier (meines Wissens) im ersten Byte des Arrays gespeichert.

Null-terminiert

"Hallo",0

Das letzte Byte des Strings hat den Wert 0, was angibt, dass der String hier zu ende ist. Die Länge eines solchen Strings kann man sich natürlich leicht berechnen.

Diese Methode hat den Vorteil, dass der String keine Längenbegrenzung hat, er kann also auch ein paar Megabyte groß sein. Bei einer Methode ähnlich zu ShortString bräuchte man dafür bereits eine 4 Byte große Längenangabe.

Der Nachteil ist aber natürlich, dass man sich die Länge des Strings berechnen muss, wenn man sie benötigt. Null-terminierte Strings sind also bei vielen Operationen etwas langsamer.

Wieso benutzt OpenGL null-terminierte Strings?

Für Standards ist es immer wünschenswert möglichst wenig Fehleranfälligkeiten (hier im Bezug auf Überläufe oder Overflows) und gleichzeitig möglichst wenig Spezialfälle zu bieten. Hier wurde also auf die etwas geringere Performance keine Rücksicht genommen.

Meist wird nicht das Feld selbst übergeben sondern ein Zeiger (Pointer) auf das Feld. (Pointer auf null-terminierte Strings heißen deshalb in Pascal/Delphi auch PChar). Damit ist man dann theoretisch in der Lage, den String zu benutzen. Wenn man im Delphi-Stil die Länge eines Strings haben möchte, muss man sich diese wie bereits erwähnt selbst berechnen, also den String nach dem "\0"-Zeichen durchsuchen.

Für C++ Programmierer

Die STL-Klasse "std::string" erlaubt auch, den gespeicherten String als "C-String", also als null-terminierten String, zu verwenden. Der entsprechende Funktionsaufruf ist String.c_str().