Tipos no válidos: 'Array' y 'matriz dinámica'
Pregunta
Escribí una función que me da la longitud de una matriz dinámica convirtiéndola en cadena y pidiendo longitud (trim (string));
function arraylength(a: array of char): integer;
var i: integer;
s: string;
begin
for i:=0 to high(a) do
begin
s[i] := a[i-1];
Result := length(trim(s));
end;
end;
En mi programa principal, leo el texto en una cadena, lo convierto en una matriz
procedure TForm1.Button2Click(Sender: TObject);
var i: integer;
begin
for i:=0 to length(sString) do
begin
cChar[i] := sString[i];
end;
end;
y hacer:
ShowMessage(IntToStr(arraylength(cChar)));
Me sale el error como se indica en el título.
Solución
Al pasar matrices a procedimientos y funciones en delphi, debe declararlas como un tipo separado. Por lo tanto:
type
MyArray = array of char;
y luego
function arraylength(a: MyArray ): integer;
Por cierto: ¿por qué no usas funciones integradas como Length ()? En Delphi2009, la cadena de tipo es cadena unicode, por lo que Longitud devuelve Longitud en caracteres, no en bytes.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow