[fpc-devel] MoveChars - docs.embarcadero.com ...

Jonas Maebe jonas.maebe at elis.ugent.be
Sun Jul 22 20:43:06 CEST 2012


On 22 Jul 2012, at 20:18, silvioprog wrote:

> 2012/7/22, Jonas Maebe <jonas.maebe at elis.ugent.be>:
>> 
>> On 22 Jul 2012, at 04:54, silvioprog wrote:
>> 
>>> There MoveChars* function (or similar) native on Free Pascal?
>>> 
>>> (*) -
>>> http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/System_MoveChars.html
>> 
>> As far as I can tell,
>> 
>>  MoveChars(Source,Dest,Length);
>> 
>> is exactly the same as
>> 
>>  Move(Source,Dest,Length*2);
> 
> Hm... I think that MoveChars copy a string to another string, but
> maintaining the contents of the second string (I'm without delphi for
> test it).

MoveChars just moves data. It has no special support for strings or anything else. See the example code on the Embarcadero site.

> So, I'll try to explain my problem ...
> 
> I am needing to move a string to another string, eg:
> 
> var
>  d, s: string;
> begin
>  d := 'the on the table';
>  s := 'books ';
>  SetLength(d, Length(d) + Length(s));
>  Move(s, d[4], Length(s));

This moves the contents of the string pointer (I suppose you are in a mode where string=ansistring), you have to use s[1] instead.

>  writeln(d); // the result should be 'the books on the table', but I
> get 'the|?S  |?e table  ?'

What you want is

var
 d, s: string;
begin
 d := 'the on the table';
 s := 'books ';
 insert(s,d,4);
 writeln(d);

> end;
> I could easily do this using "copy", but I'm trying (without success)
> to do this at low level.

I would strongly recommend against it. You'll mainly run into problems by combining reference counted data and low level routines. The RTL versions already use the low level routines in the correct ways.


Jonas


More information about the fpc-devel mailing list