arrays - 如何将短字符串数组传递给方法

标签 arrays delphi delphi-2007

我想制作一个以短字符串数组作为参数的过程

procedure f(const a, b: Array of shortstring);

我想用已知长度的数组和已知长度的短字符串来调用它,例如

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;

这会导致编译器错误 E2008 类型不兼容。 这是为什么?我可以编写一个可以接受短字符串数组(任意长度的数组/字符串)的过程吗?

为什么使用短字符串?

shortstings 是现有记录中的字段。有很多这样的唱片有数千个短弦。为了将数据从涡轮增压 B-Tree Filer 迁移到 SQL 数据库,第一步是将记录转换为数据集,然后再转换回记录,以确认所有字段都在两个方向上正确转换。我一直在记录上使用 CompareMem 来检查这一点,但它没有提供足够的信息来说明转换错误位于哪个字段。因此创建了一个小程序,可以从记录定义生成比较两条记录的代码。对于这个代码生成器,我需要一个函数来比较短字符串。它最终在短字符串上使用了 CompareMem

最佳答案

ShortString 的长度为 0 到 255 个字符。 ShortString 的长度可以动态改变,但内存是静态分配的 256 个字节,第一个字节存储字符串的长度,其余 255 个字节可用于字符,而以这种方式声明的 string[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;

关于arrays - 如何将短字符串数组传递给方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7927895/

相关文章:

ios - 快速推送/append 数组

通过函数传递数组时python列表索引超出范围

javascript:缺少:在属性 ID 之后

php - PHP字符串索引数组如何在C++中高效实现

delphi - 如何使用 TStringHelper 测试两个字符串的序数不区分大小写相等?

delphi - 如何在TWebBrowser导航结束时以编程方式自动滚动到所需位置

Delphi - 如何在 TStringGrid 中设置垂直滚动条,始终可见

delphi - 如何删除我的项目中未找到的以下路径?

delphi - 优化Delphi中包含的文件和使用

delphi - 为什么 Delphi 中的 FillChar 将货币变量视为常量?