看得出,楼主没有系统地学过Delphi。
var P:array of string
这一句写在过程或函数的参数位置处时,这个P并不是指动态数组,而叫作“开放式数组”,开放式数组是不能用Setlength过程去指定其大小的,而只能由调用处的实参来给出数组的大小。如:
procedure TForm1.Button1Click(Sender: TObject);
var
P:array[0..9] of string;
sp:string;
begin
sp:='abcdefg';
GetPoint(sp,p);
end;
改成这样吧:
Type
TStrAry=Array of String;
function GetPoint(const sp:string;var P:TStrAry):Boolean;
var
i:integer;
aList:TStrings;
begin
Result:=False;
aList:=TStringList.Create;
try
aList.Delimiter:=' ';
aList.DelimitedText:=sp;
setLength(p,aList.Count);
for i:=0 to aList.Count-1 do
P[i]:=aList[i];
Result:=True;
finally
aList.Free;
end;
end;
调用例子:
procedure TForm1.Button1Click(Sender: TObject);
var a:TStrAry;
s:string;
i:integer;
begin
s:='a b c';
GetPoint(s,a);
for i:=low(a) to high(a) do
showmessage(a[i]);
end;
你应该把错误代码贴出来,好看是什么地方出了问题。
不过就代码看来,应该是String数组当地址传参时,不能在调用函数中队数组进行初始化长度设定。