On 25/04/2012 21:11, Amir wrote:
I am not sure what you mean be "your program is not valid". I am
initializing Result. Modify its content and ...
I already observed that if I use either shortstring or use indices to
modify Result, this problem does not occur. But still I can't see what
causes this problem. And I believe it is a bug, isn't it?
Try the program at the end.
it will print "x" !!!
Strings a pointers. And they do "copy on write"
s2 := s1;
means that s1 and s2 point to the same memory (not only the same
content, but the same location in mem)
Internally the strig knows, that the memory is used by 2 strings
s2[1] := 'a';
will trigger "copy on write". So s2 gets copied first then modified
using pchar does not trigger such copies.
so the cod modifies the constant you use for initialization.
try
UniqueString(Result);
program Project1;
function Foo: AnsiString;
begin
Result:= ' ';
end;
var
s: String;
p: PChar;
begin
s := Foo;
p := @s[1];
p^ := 'x';
writeln(Foo);
readln;
end.
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel