[fpc-pascal] Question: range checking for string indexing
Vinzent Höfler
JeLlyFish.software at gmx.net
Thu Oct 30 21:32:59 CET 2008
Tom Verhoeff wrote:
> On Wed, Oct 29, 2008 at 09:58:10PM +0100, Vinzent Höfler wrote:
>> 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:
>
> That looks rather convincing.
>
>> Borland Pascal Version 7.0 Copyright (c) 1983,92 Borland International
>
> However, IIRC there were some differences between Borland Pascal
> and Turbo Pascal (as it was named before they marketed it as
> Borland Pascal).
Yes, there were. But regarding string handling, nothing changed, at
least not between TP5.5 and BP7. And I know for sure that accessing
element 0 was always allowed, because it could be taken as shortcut for
reading or even changing the length.
> Nevertheless, this means that AnsiStrings and ShortStrings are slightly
> more different than suggested in the documentation.
Well, if you put it this way, yes. With ShortStrings you rather get a
maximum size (where indexing is allowed regardless of the actual length,
although the behaviour could be considered more or less undefined - just
like accessing uninitialized memory), whilst AnsiString's behaviour
doesn't distinguish between length and (maximum) size.
Vinzent.
More information about the fpc-pascal
mailing list