Delphi 无效类型:';数组';和';动态数组';

Delphi 无效类型:';数组';和';动态数组';,delphi,arrays,char,Delphi,Arrays,Char,我编写了一个函数,通过将动态数组转换为字符串并询问长度(trim(string)),来计算动态数组的长度 在我的主程序中,我将文本读入字符串,然后将其转换为数组 procedure TForm1.Button2Click(Sender: TObject); var i: integer; begin for i:=0 to length(sString) do begin cChar[i] := sString[i]; end; end; 并且做: ShowMessage(

我编写了一个函数,通过将动态数组转换为字符串并询问长度(trim(string)),来计算动态数组的长度

在我的主程序中,我将文本读入字符串,然后将其转换为数组

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

我得到了标题中所述的错误。

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

type
  MyArray =  array of char; 
然后

function arraylength(a: MyArray ): integer;

顺便问一下:为什么不使用像Length()这样的内置函数呢?在Delphi2009中,类型字符串是unicode字符串,因此Length以字符而不是字节返回长度。

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

type
  MyArray =  array of char; 
然后

function arraylength(a: MyArray ): integer;

顺便问一下:为什么不使用像Length()这样的内置函数呢?在Delphi2009中,类型字符串是unicode字符串,因此Length以字符而不是字节返回长度。

我不使用它,因为在这种情况下,我有一个动态数组,并且由于空间的动态分配,Length(cChar)返回的值大于数组中的实际字符数。如果有一个函数能给出实际的字符数,我将不胜感激。你的意思是你有一个数组,比如说20个元素,但你现在只使用15个?我不使用它,因为在这种情况下,我有一个动态数组和长度(cChar)由于空间的动态分配,返回大于数组中实际字符数的值。如果有一个函数能给出实际的字符数,我将不胜感激。你的意思是说你有一个数组,比如说20个元素,但你现在只使用15个?你剩下的代码都很糟糕。数组的基索引为零。字符串的基址是1。在调用SetLength之前,字符串和数组都不包含任何内容。您应该检查
s
在循环外的长度;否则,您将收到一条警告,该函数可能不会返回值。如果下一步要做的是将字符串填充回字符串,那么为什么要将字符串转换为数组呢?请查看StrLen()和类似的函数。你为什么不首先使用PChar呢?你的代码的其余部分都是非常不完整的。数组的基索引为零。字符串的基址是1。在调用SetLength之前,字符串和数组都不包含任何内容。您应该检查
s
在循环外的长度;否则,您将收到一条警告,该函数可能不会返回值。如果下一步要做的是将字符串填充回字符串,那么为什么要将字符串转换为数组呢?请查看StrLen()和类似的函数。你为什么不首先使用PChar?