[fpc-devel] fpc_pchar_length error
danny.milo at gmx.net
Mon Dec 12 23:21:54 CET 2005
Am Montag, den 12.12.2005, 15:29 +0200 schrieb Alexandrov Alexandru:
> On 12/12/05, Michael Van Canneyt <michael at freepascal.org> wrote:
> > On Mon, 12 Dec 2005, Jonas Maebe wrote:
> > >
> > > On 11 dec 2005, at 22:22, Alexandrov Alexandru wrote:
> > >
> > >>> It depends on the specs of "length" :-)
> > >>
> > >> What do you mean with specs?
> > >
> > > How it is defined to behave in the documentation (i.e., whether the
> > > documentation says "if you call length with as argument a nil pointer, the
> > > result is defined to be 0", or "the behaviour of length with as argument a
> > > nil pointer is undefined", or simply doesn't mention it at all).
> > Exactly.
> > >> btw i forgot to mention, i tested on winxp.
> > >> In Delphi the result is 0, and no error.
> > >
> > > Delphi obviously is a lot more tolerant to bad programming than we are... A
> > > pchar which is nil is not an empty string, but an invalid pointer. It's like
> > > assuming that a nil pointer to a longint is the same as a pointer to the
> > > value 0 or so.
> > I agree with this position.
> > A Nil pointer is usually a sign of a bad or uninitialized value.
> ..but we speak here about the length of the string. IMO the length of
> null string is the same as the length of an unitialised string.
It isn't technically a string, it's a PChar. Some horrible hack pointer
to a char that happens to be able to be interpreted as a string by the
programmer (C) or compiler (Pascal).
If something is "nil", the value isn't "there" to begin with. So the
length of "value not there" would be either
1) "value not there"
3) exception, "eeek! it's not there"
but certainly not "0" :)
If you don't have a specific need for a PChar (as in "interfacing to C
code"), don't use it. Use a pascal string :)
(Note that all "newer" stuff - read: ms excel etcetc - uses pascal-like
strings because using char pointers for string is just ... weird - not
to mention *slow* - especially determining the length!)
More information about the fpc-devel