Arrays 如何在delphi中将字符串数组作为参数传递给函数
我对德尔福有意见 我写了这样一个函数:Arrays 如何在delphi中将字符串数组作为参数传递给函数,arrays,delphi,delphi-10.1-berlin,Arrays,Delphi,Delphi 10.1 Berlin,我对德尔福有意见 我写了这样一个函数: function MyFunction(arr: array of AnsiString): Boolean; begin //code here end; var arr: array of AnsiString; procedure MyProcedure; begin arr[0] := ['one', 'two', 'three']; MyFunction(arr[0]); end; procedure MyProcedure;
function MyFunction(arr: array of AnsiString): Boolean;
begin
//code here
end;
var arr: array of AnsiString;
procedure MyProcedure;
begin
arr[0] := ['one', 'two', 'three'];
MyFunction(arr[0]);
end;
procedure MyProcedure;
var
arr: array of AnsiString;
begin
SetLength(arr, 3);
arr[0] := 'one';
arr[1] := 'two';
arr[2] := 'three';
MyFunction(arr);
end;
现在,当我将一组AnsiString
直接传递到函数中时,就像这样,一切都很完美:
MyFunction(['one', 'two', 'three']);
但是,当我尝试像这样存储此数组时:
function MyFunction(arr: array of AnsiString): Boolean;
begin
//code here
end;
var arr: array of AnsiString;
procedure MyProcedure;
begin
arr[0] := ['one', 'two', 'three'];
MyFunction(arr[0]);
end;
procedure MyProcedure;
var
arr: array of AnsiString;
begin
SetLength(arr, 3);
arr[0] := 'one';
arr[1] := 'two';
arr[2] := 'three';
MyFunction(arr);
end;
存在不匹配错误
我是Delphi的初学者,但这确实令人困惑。您的第二个示例在功能上与第一个示例不同 第一个例子很好。该函数将接受作为输入参数,您可以直接在该参数中构造一个固定的字符串数组,这非常好。任何数组类型都可以传递给打开的数组参数 在第二个示例中,您声明了一个字符串数组,但没有为数组分配任何内存,并且尝试将其第一个元素(单个字符串)分配给指向固定字符串数组的元素。然后,您尝试将该元素(同样是单个字符串)传递到需要数组的位置。这就是代码无法编译的原因 编写过程的正确方法如下所示:
function MyFunction(arr: array of AnsiString): Boolean;
begin
//code here
end;
var arr: array of AnsiString;
procedure MyProcedure;
begin
arr[0] := ['one', 'two', 'three'];
MyFunction(arr[0]);
end;
procedure MyProcedure;
var
arr: array of AnsiString;
begin
SetLength(arr, 3);
arr[0] := 'one';
arr[1] := 'two';
arr[2] := 'three';
MyFunction(arr);
end;
或者:
procedure MyProcedure;
var
arr: array of AnsiString;
begin
arr := ['one', 'two', 'three'];
MyFunction(arr);
end;
type
TAnsiStringArray = array of AnsiString;
procedure MyProcedure;
var
arr: TAnsiStringArray;
begin
arr := TAnsiStringArray.Create('one', 'two', 'three');
MyFunction(arr);
end;
或者:
procedure MyProcedure;
var
arr: array of AnsiString;
begin
arr := ['one', 'two', 'three'];
MyFunction(arr);
end;
type
TAnsiStringArray = array of AnsiString;
procedure MyProcedure;
var
arr: TAnsiStringArray;
begin
arr := TAnsiStringArray.Create('one', 'two', 'three');
MyFunction(arr);
end;
你可以看看这篇文章:你为什么要使用AnsiString?@DavidHeffernan这很重要吗?对于字符串数组也存在同样的问题。当您的程序开始接收非ASCII数据时,这将变得非常重要