Tom Verhoeff wrote:
I am surprised that for ShortString, the range is not
also 1 <= i <= Length(s).
IIRC Turbo Pascal only allowed you to access s[0] when range checking
was off, and similarly for s[i] with i > Length(s).
No. See transcript:
-- 8< -- the program --
{$R+}
var
s1 : String;
s2 : String[40];
begin
s1 := '';
s2 := '';
WriteLn (Length (s1));
WriteLn (Length (s2));
WriteLn (Ord (s1[0]));
WriteLn (Ord (s2[0]));
WriteLn (Ord (s1[255]));
WriteLn (Ord (s2[255]));
end.
-- 8< --
results in:
-- 8< --
Borland Pascal Version 7.0 Copyright (c) 1983,92 Borland International
TEST.PAS(18): Error 76: Constant out of range.
WriteLn (Ord (s2[255]));
^
-- 8< --
Commenting out the offending last line of code:
-- 8< --
Borland Pascal Version 7.0 Copyright (c) 1983,92 Borland International
TEST.PAS(19)
19 lines, 2432 bytes code, 968 bytes data.
-- 8< --
Running the program:
-- 8< --
.\TEST.EXE
0
0
0
0
0
-- 8< --
No errors, although the index exceeds the actual length of the string.
Vinzent.
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal