【发布时间】:2009-08-05 09:21:02
【问题描述】:
我写了一个函数,它通过将动态数组转换为字符串并询问 length(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。在调用 SetLength 之前,字符串和数组都不包含任何内容。您应该在循环外检查
s的长度;否则,您应该收到一个警告,指出该函数可能不会返回值。如果接下来要做的就是将它塞回字符串中,为什么还要将字符串转换为数组? -
查看 StrLen() 和类似的函数。你为什么不首先使用 PChar?