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

> 2012/7/22, Jonas Maebe <jonas.ma...@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_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to