next up previous
Nächste Seite: Speicherung der Zeichenketten: Aufwärts: Zeichenketten Vorherige Seite: Zeichenketten

Das Abschlusszeichen 0C:

Zeichenketten werden in in Variablen des Typs ARRAY[0..n] OF CHAR abgelegt. Die darin abgelegte Zeichenkette darf $0$ bis $n+1$ Zeichen umfassen. Ist sie kürzer als $n+1$, dann wird sie mit einem 0C Zeichen abgeschlossen. Ist die Zeichenkette jedoch genau $n+1$ Zeichen lang, so ist sie nicht mit einem 0C Zeichen abgeschlossen. Die Amiga-Prozeduren erwarten jedoch, dass jede Zeichenkette mit einem Nullbyte endet. Der Programmierer ist also dafür verantwortlich, die Zeichenketten lang genug zu deklarieren!

Zeichenketten werden meist als Offene Feldparameter (``Open Arrays``) an Prozeduren übergeben. Diese besitzen eine Besonderheit: Offene Feldparameter mit der Komponentengrösse 1 -- dies ist bei Zeichenketten der Fall -- enden nun garantiert immer mit einem Nullbyte, wenn sie von der Prozedur auf den Stack kopiert werden. Sie werden genau dann auf den Stack kopiert, wenn sie Werte-Parameter sind und nicht die Option (*$ CopyDyn:=FALSE *) angegeben wurde.

Der Nutzen liegt darin, dass derartige Parameter direkt an das Betriebssystem übergeben werden können.


\begin{example}
Ein Beispiel:
\begin{alltt}
\relax{} PROCEDURE WriteS(s: ARRAY O...
...Write(file, ADR(s), Length(s))
\\ END WriteS;
\\ \relax \end{alltt}\end{example}

Im -System kann es nur nach einer Zuweisung an eine Variable oder beim direkten Manipulieren einzelner Feldelemente des ARRAYs vorkommen, dass eine Zeichenkette nicht mit 0C abgeschlossen ist.

Alle konstanten Zeichenketten werden vom Compiler automatisch mit einem Nullbyte abgeschlossen und auf einer geraden Adresse im Konstantenbereich abgelegt.

Bei der Übergabe konstanter Zeichenketten an einen offenen Feldparameter wird das abschliessende Nullbyte mitkopiert, sodass auch diese Zeichenketten ,,sicher`` sind. Der Wert von HIGH ist also gleich SIZE oder String.Length, jedoch mindestens 1. Hier heisst es aufzupassen: dies ist eine Neuerung gegenüber der Compiler-Version 3.3!.

Ebenso schliessen alle Prozeduren des Moduls String -- mit Ausnahme der Prozeduren, welche die Länge nicht verändern -- und Terminal.ReadLn nach der Verarbeitung die Zeichenkette mit einem Nullbyte ab.


next up previous
Nächste Seite: Speicherung der Zeichenketten: Aufwärts: Zeichenketten Vorherige Seite: Zeichenketten
Claudio Nieder 2000-11-12