如何将shorttring数组传递给方法

MGH*_*MGH 3 arrays delphi delphi-2007

我想创建一个以shorttring数组作为参数的过程

procedure f(const a, b: Array of shortstring);
Run Code Online (Sandbox Code Playgroud)

我想用已知长度和已知长度的短串的数组来称呼它,例如

var
  A, B: array[1..2] of string[5];
  C, D: array[1..40] of string[12];
begin
  f(A,B);
  f(C,D);
end;
Run Code Online (Sandbox Code Playgroud)

这导致编译器错误E2008不兼容的类型.这是为什么?我可以编写一个可以获取shorttring数组的过程(任何长度的数组/字符串)吗?

为什么要使用短裤?

缺点是现有记录中的字段.这些记录有很多短线串.为了将数据从turbo power B-Tree Filer迁移到SQL数据库,一步是将记录转换为数据集,然后返回记录,以确认所有字段都在两个方向上正确转换.我一直在使用CompareMem记录来检查这一点,但它没有提供关于转换错误所在的字段的足够信息.因此创建了一个小程序,从记录定义中可以生成代码来比较两个记录.对于这个代码生成器,我需要一个函数来比较shorttrings.它最终CompareMem用于短线.

Mis*_*haU 7

ShortString长度为0到255个字符.ShortString的长度可以动态改变,但是内存是静态分配的256个字节,第一个字节存储字符串的长度,剩下的255个字节可用于字符,以这种方式声明的whilist字符串[5]仅分配为类型要求的内存很多(长度为5字节+ 1字节).你可以使用类型

type
    MyString = string[5];
...
procedure f(const a, b: Array of MyString);
...

var
    A, B: array[1..2] of MyString;
begin
    f(A,B);
end;
Run Code Online (Sandbox Code Playgroud)

  • @MGH这是不可能的.string [5]的数组和string [12]的数组不是兼容的类型. (4认同)