On 29/10/17 00:31, Vojtěch Čihák wrote:
Looking to docs: https://www.freepascal.org/docs-html/ref/refsu69.html

I tried writeln(AnsiString(args[0].VAnsiString));

or just writeln(String(args[0].VAnsiString));

which works.

V.

______________________________________________________________
 > Od: Darius Blaszyk <dhkblas...@zeelandnet.nl>
 > Komu: FPC-Pascal users discussions <fpc-pascal@lists.freepascal.org>
 > Datum: 29.10.2017 00:59
 > Předmět: [fpc-pascal] Problem with array of const
 >

Consider the application below. When I run it I do get the following output:

name
rg��������name�F&{00000000-0000-0000-C000-000000000046}

In other words I lose the first character (a) from the arguments supplied and the string returns with a lot of garbage. What am I doing wrong here?

Rgds, Darius

program test_args;

procedure test(name: string; args: array of const);
begin
   writeln(name);
   writeln(args[0].VString^);
end;

begin
   test('name', ['arg']);
end.


----------

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


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



      vtString     : (VString: PShortString);


in short the compiler is sending AnsiString and you are then telling it to interpret this as a traditional pascal string of length 97. The Tvarrec in the Array of const effectively removes the usual strong type checking you get with Pascal.

string literals now get compiled as AnsiString unless you explicitly assign them to a typed constant:


program test_args;
{$mode objfpc}

procedure test(name: string; args: array of const);
begin
  writeln(name);
  writeln(args[0].VString^);
end;

const  sh:shortstring='sconst';
var s:shortstring='arg';

begin
  test('name', [s]);
  test('name', [sh]);
end.


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

Reply via email to