2009-08-05 56 views
0

我写了一个函数,它通过将其转换为字符串并询问长度(trim(string))给出了动态数组的长度。无效的类型:'Array'和'dynamic array'

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))); 

我得到的错误,如标题所述。

+3

其余的代码非常坏。数组的基础指数为零。字符串的基地址是一个。除非调用SetLength,否则字符串和数组都不包含任何内容。你应该检查循环外`s`的长度;否则,你应该得到一个警告,说明这个函数可能不会返回一个值。任何为什么你将字符串转换为数组,如果接下来的事情是把它重新写回字符串? – 2009-08-05 13:34:45

+1

调查* StrLen()*和类似的功能。你为什么不首先使用* PChar *? – mghie 2009-08-05 13:41:13

回答

4

将数组传递给delphi中的过程和函数时,应该将它们声明为单独的类型。因此:

type 
    MyArray = array of char; 

然后

function arraylength(a: MyArray): integer; 

BTW:你为什么不使用内置的功能,如长度()?在Delphi2009中,类型字符串是unicode字符串,所以Length返回字符长度,而不是字节。