[fpc-pascal] Version 2.1.4
Michael Van Canneyt
michael at freepascal.org
Sat Jun 2 20:52:29 CEST 2007
On Sat, 2 Jun 2007, Rainer Stratmann wrote:
> Am Samstag, 2. Juni 2007 19:59 schrieb Peter Vreman:
> > At 19:58 2-6-2007, you wrote:
> > >Hello,
> > >
> > >1.
> > >
> > >var s:string;
> > >...
> > >s[1]:='#'; --> causes an access violation
> > >
> > >2.
> > >
> > >Why is it no more possible to assign the length index s[0] in a string?
> > >I find that is too much security to supress that.
> > >It is cutting responsibility from the programmers.
> >
> > You are using ansistrings instead of shortstrings. Use SetLength()
> > first to allocate memory.
> >
> Does that mean that
>
> var s:string; is definig an ansistring in delphi mode?
Yes.
>
> In the previous version this works, is it now changing generally to
> ansistrings?
Yes.
In old versions {$mode delphi} did not automatically imply {$h+}.
Now it does.
> How can I assign "normal" pascalstrings?
Put
{$h-}
at the start of your file, or use the -Sh- option on the command-line.
Alternatively, define your string as
Var
S : Shortstring;
This works in any mode, and is delphi compatible.
> Is there a description about the behaviour of strings and ansistrings in the
> various modes?
Yes, the reference documentation. The only effect of the {$h} directive is
to map String->Ansistring when {$h ON} or String-> Shortstring when {$h off}
is in effect. You can always force either of those by explicitly using ansistring, shortstring or
declaring a fixed-length string.
This is 100% delphi compatible. The only thing that has changed is that
{$mode delphi} now implicitly implies {$h+}. This is again compatible
with newer versions of Delphi, where {$H+} is now the default.
Hope this clarifies matters a bit. I'll add a statement of the changed
behaviour to the documentation of {$mode} and {$H}
Michael.
More information about the fpc-pascal
mailing list