Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在delphi中将字符串数组作为参数传递给函数_Arrays_Delphi_Delphi 10.1 Berlin - Fatal编程技术网

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数据时,这将变得非常重要