【发布时间】:2018-10-17 01:56:03
【问题描述】:
我有以下变量声明:
arrChar_1: array[0..2] of Char;
arrChar_2: array[0..2] of Char;
str: string;
然后我做了作业:
str := arrChar_1 + arrChar_2;
这个赋值在 Delphi 6 上正常工作。但是当我在 Delphi 10.2 上编译它时出错:
[dcc32 Error] MigrateConcatenateCharArray.dpr(26): E2008 Incompatible types
我正在通过以下方式解决这个问题:
str := Copy(first_arrChar, 0, StrLen(first_arrChar));
str := str + Copy(second_arrChar, 0, StrLen(second_arrChar));
这个问题还有其他好的解决方案吗? (1)
在 Delphi 6 中:
String = AnsiString
Char = AnsiChar
在德尔福 10.2 中:
String = UnicodeString
Char = WideChar
能否告诉我是什么导致了不兼容问题的发生? (2)
我知道widechar 是一种多字节字符类型。 Unicode 是字符的编码方式。但我对它们感到困惑。
【问题讨论】:
-
我不希望在 Delphi 6 中编译串联数组。如果数组以空值结尾(您的解决方法取决于),您可能会逃脱
str := string(arrChar_1) + string(arrChar_2);或最坏的情况str := string(@arrChar_1[0]) + string(@arrChar_2[1]);但是,出于性能原因,我可能会使用len1 := StrLen(arrChar_1); len2 := StrLen(arrChar_2); SetLength(str, len1 + len2); Move(arrChar_1, PChar(str)^, len1 * sizeof(Char)); Move(arrChar_2, (PChar(str) + len1)^, len2 * sizeof(Char));甚至str := Format('%s%s', [arrChar_1, arrChar_2]); -
str := string(arrChar_1) + string(arrChar_2);呢? -
这行得通:
str := arrChar_1; str := str + arrChar_2;。好像是编译器错误,应该在QP上报告。
标签: delphi delphi-10.2-tokyo delphi-6