Siempre has de reservar el máximo posible (siempre y cuando esté entre unos límites razonables) para el dato que vas a almacenar.
Normalmente pasas un array con 1 o 2 kb de largo y la función te devuelve cual es el máximo que la función ha usado, por ende, si te devuelve 43, sólo pillas del array desde el cero al 42.
La mayoría de esas funciones añaden el carácter #0 en el índice 43 (o el que corresponda), que como sabes es el carácter nulo, el carácter que hace terminar un PChar en delphi. Los arrays son en realidad un Pchar, por tanto es compatible.
El párrafo anterior quiere decir que ese buffer puedes copiarlo con tranquilidad a un string de delphi que no obtendrás la basura que haya al final del buffer.
Código Delphi
[-]
var aa: array[0..1023] of char;
b:string;
begin
funcion_usa_buffer(@aa);
b := aa;
end;
Sé que hay varias funciones para "resetear una zona de memoria" creo una de ellas es
fillchar y hay otras para bloques de memoria que no recuerdo horitamesmo...
baludos