我想制作一个以短字符串数组作为参数的过程
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/