Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2011-10

Why do string indices start at 1, but array indices start at 0?

7 messages · 7 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Andrew Pennebaker

It's inconsistent and ripe for bugs.

Cheers,

Andrew Pennebaker
www.yellosoft.us

Roberto P.
to Tomas Hajny: Array indices may start at any ordinal value (including e.g. characters, values of…

2011/10/21 Tomas Hajny

Show quoted text 12 lines
On 20 Oct 11, at 17:43, Andrew Pennebaker wrote: > It's inconsistent and ripe for bugs. Array indices may start at any ordinal value (including e.g. characters, values of enumerated types, etc.), not just 0. Only dynamic arrays always start at 0 because that is how they have been "imported" from other languages. Tomas

As said by Thomas, I think we will have to get along with string[1]. However, since I stumbled upon the string[0] mistake more than once, I take the chance to suggest a way to reduce the likelihood of it.

During compilation, by statically checking the indices used to access the string, the compiler could fire a warning (or error?) if a string[0] is found.
I think that most of the times the string[0] happens inside a for loop or similar, so a good percentage of these mistakes can be caught.

R#

_______________________________________________ fpc-pascal maillist - http://lists.freepascal.org/mailman/listinfo/fpc-pascal
Jonas Maebe
to Roberto P.
Roberto P. wrote
During compilation, by statically checking the indices used to access the string, the compiler could fire a warning (or error?) if a string[0] is found.

The compiler already does that (except for shortstrings, where string[0] is valid).

Jonas

Marco van de Voort
to Jonas Maebe

In our previous episode, Jonas Maebe said:

Show quoted text 5 lines
> During compilation, by statically checking the indices used to access the > string, the compiler could fire a warning (or error?) if a string[0] is > found. The compiler already does that (except for shortstrings, where string[0] is valid).

Isn't the warning mode dependent? Delphi warns, or at least it did in older versions.