Naja, PChar hat keine Längenangabe und daher wird #0 meist als Ende interpretiert. Das kann man umgehen indem man anstelle von PChar einfach ^String verwendet. Somit kann man durch dereferenzieren auch die Compilermagic etc. nutzen und hat keine Probleme wenn einmal #0 vorkommt (gerade bei UTF8,
Unicode etc. sehr sinnvoll)
Dein Beispiel würde dann also so aussehen:
Delphi-Quellcode:
var
p: ^String;
new(p);
p^ := myStr;
AItem.Data := p;
[...]
Somit kann man alles (abgesehen vom notwendigen dereferenzieren) wie gewohnt machen und muss nicht plötzlich auf Funktionen wie StrCopy zurück greifen welche genannte Nachteile haben. Das kopieren durch direkt Zuweisung könnte damit durchaus sogar schneller sein weil ein normaler String eine Längenangabe besitzt wo hingegen bei PChar erst nach der abschließenden #0 gesucht wird um zu wissen wie groß die zu kopierenden Daten sind.