Du kan bara indexera inom den aktuella längden på strängen. Alltså inte den deklarerade
längen utan den *aktuella* längden. Detta är OK (tredje tecknet är ett "c") :
Kod: Markera allt
$ typ STR_PAS.pas
program str(output);
var
text : string(3);
x : char;
begin
text := "abc";
x := text[3];
writeln(x);
end.
$ pas STR_PAS.pas
$ link STR_PAS
$ run STR_PAS
c
$
Kod: Markera allt
program str(output);
var
text : string(3);
x : char;
begin
text := "ab";
x := text[3];
writeln(x);
end.
$ pas STR_PAS.pas
$ link STR_PAS
$ run STR_PAS
%PAS-F-VARINDVAL, varying index value is greater than current length
%TRACE-F-TRACEBACK, symbolic stack dump follows
image module routine line rel PC abs PC
STR_PAS STR STR 7 0000000000000038 0000000000020038
0 FFFFFFFF8038BC44 FFFFFFFF8038BC44
%TRACE-I-END, end of TRACE stack dump
$
det ger samma felmeddelande. text[3] existerar helt enkelt inte...
Kod: Markera allt
VARINDVAL, VARYING index value exceeds current length
Explanation: The index value specified for a VARYING OF CHAR string
is greater than the string’s current length.
User Action: Correct the index value so that it specifies a legal character
in the string.