Зачем под String резервировать? Там же память вроде динамически выделяется. вот тут посмотри :
http://it.kgsu.ru/Ob_Pas/obpas035.html
PCHAR - это не строка а всего лишь указатель на строку, если нада динамически выделять память- создаешь динамический массив, работаешь с ним, и кастуй на него хоть тысячу PChar'ов,
ну типа MyPChar:= PChar(MyArray);