char[] annoyance...
Regan Heath
regan at netwin.co.nz
Sun Apr 9 17:23:06 PDT 2006
Take this code:
void main()
{
//..open a file, read line for line, on each line:
for(int i = 0; i < line.length-2; i++) {
if (line[i..i+2] != "||") continue;
//..etc..
}
}
There is a subtle bug. On all lines with a length of 0 or 1 it will give
the following error:
Error: ArrayBoundsError line_length.d(6)
The problem is of course the statement "i < line.length-2". line.length is
unsigned, and when you - 2 from an unsigned value.. well lets just say
that it's bigger than the actual length of the line - 2.
Of course there are plently of other ways to code this, perhaps using
foreach, but that's not the point. The point is that this code _can_ be
written and on the surface looks fine. Not even -w (warnings) spots the
signed/unsigned problem. At the very least can we get a warning for this?
Regan
More information about the Digitalmars-d
mailing list