On Thu, 27 Sep 2007, Marco van de Voort wrote:

> > [EMAIL PROTECTED] (Marco van de Voort) wrote:
> > > A cast is really a cast. IOW the cast pchar(ansistring) is mostly a
> > > no-op. Traditional C code then usually treats the #0 as end of
> > > string. 
> > 
> > PChar(AnsiString) was a no-op typecast in the past and is nowadays a
> > function. It checks whether the AnsiString is nil and if yes returns a
> > pointer to a string containing one character: #0.
> > 
> > That means:
> > Pointer(AnsiString) <> Pointer(PChar(AnsiString))
> > 
> > To get a no-op typecase you can use:
> > MyPChar:=PChar(Pointer(AnsiString));
> 
> Is this delphi compat, and if yes, what is this exactly for?

It is Delphi compatible.

PChar(AnsiString)

Will always point to a null-terminated string. If the string is empty
(which means the pointer value is Nil), a pointer to a pre-defined 
null-terminated string is returned. In other words: you always get a non-nil
value.

On the other hand:

Pointer(AnsiString)

Returns Nil if the string is empty.

Michael.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to