Неверные типы: 'Array' и 'dynamic array' - PullRequest
0 голосов
/ 05 августа 2009

Я написал функцию, которая дает мне длину динамического массива путем преобразования его в строку и запроса длины (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;

В моей основной программе я читаю текст в строку, преобразую его в массив

procedure TForm1.Button2Click(Sender: TObject);
var i: integer;
begin
  for i:=0 to length(sString) do
  begin
    cChar[i] := sString[i];
  end;
end;

и делай:

ShowMessage(IntToStr(arraylength(cChar)));

Я получаю ошибку, как указано в заголовке.

1 Ответ

4 голосов
/ 05 августа 2009

При передаче массивов процедурам и функциям в delphi вы должны объявлять их как отдельный тип. Таким образом:

type
  MyArray =  array of char; 

, а затем

function arraylength(a: MyArray ): integer;

Кстати: почему вы не используете встроенные функции, такие как Length ()? В Delphi2009 тип string является строкой Unicode, поэтому Length возвращает Length в символах, а не в байтах.

...