Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   manejo de funcion fillchar (https://www.clubdelphi.com/foros/showthread.php?t=2371)

mateamargo 21-07-2003 16:25:38

manejo de funcion fillchar
 
La duda que tengo es sobre el manejo de la memoria y los tipos en delphi.
Cuando estaba haciendo un programa use la funcion fillchar asi:
relleno : string[100];

...
luego
fillchar(relleno,100,´ ´);
con lo que esperaba tener un string con 100 blancos.
Pero cuando hacia un length(relleno) me daba 32.
Me desconcerto el tema y segui mirando la ayuda ahi encontre el ejemplo que explicaba el uso de fillchar:
relleno : array[0.99] of char;
y luego
fillchar(relleno,100,´ ´);
y así si funciona como yo esperaba, el supuesto que yo tome como cierto de que un string[100] era lo mismo que un array de 100 de tipo char no es correcto, podrían explicarme cual es la diferencia ???
Gracias por la ayuda, recién empiezo en esto.

delphi.com.ar 21-07-2003 16:51:22

Primero te recomiendo leer la ayuda de la función StringOfChar, creo que puede hacer lo que tu quieres.
FillChar recibe un puntero no tipado como primer dato, tu pasas un string del tipo Pascal, me da la sensación que el "32" es el valor del caracter que estas escribiendo en el marcador de longitud del string (La primer posición).

Saludos!

mateamargo 21-07-2003 19:49:53

Muchas gracias por tu respuesta.

jachguate 21-07-2003 20:37:03

Podes utilizar perfectamente la sentencia.

Código:

Var
  relleno : string[100];
Begin
  fillchar(relleno[1], 100, ´ ´);
end;

Eso siempre y cuando relleno sea un string de longitud entre 1 y 255, que son Strings tipo pascal. Como recordaras, estos strings almacenan en la posición 0 la longitud "dinámica" que tienen. Por eso, al hacerlo solamente con la dirección del string (que es la posición cero) la función length te devuelve 32, que es el ord(' ').

Jugando un poco, también podrias hacer algo como:

Código:

Var
  relleno : string[100];
Begin
  fillchar(relleno, 101, ´ ´);
  relleno[0] := chr(100); // le devuelve una longitud de 100 al string!
end;

Hasta luego.

;)


La franja horaria es GMT +2. Ahora son las 23:52:26.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi