Delphi   发布时间:2022-04-11  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了无法在Delphi 10.2中将char数组赋值给字符串大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下变量声明:
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,StrLen(first_arrChar));
str := str + Copy(second_arrChar,StrLen(second_arrChar));

这个问题有没有其他好的解决方案? (1)

在Delphi 6中:

String = AnsiString
Char = AnsiChar

在Delphi 10.2中:

String = UnicodeString
Char = WideChar

可以告诉我是什么原因造成了不兼容问题? (2)

我理解widechar是一个多字节字符类型. Unicode是字符编码的方式.但我对他们感到困惑.

解决方法

以下编译在所有版本的Delphi中:
procedure Main;
var
  arrChar_1: arraY[0..2] of AnsiChar;
  arrChar_2: arraY[0..2] of AnsiChar;
  str: AnsiString;
begin
  str := arrChar_1 + arrChar_2;
end;

以下代码不能在Unicode版本的Delphi中编译:

procedure Main;
var
  arrChar_1: arraY[0..2] of WideChar;
  arrChar_2: arraY[0..2] of WideChar;
  str: UnicodeString;
begin
  str := arrChar_1 + arrChar_2;
end;

这对我来说有点奇怪.为什么连接运算符应该支持AnsiChar数组而不支持WideChar数组?

如果你检查如何为AnsiChar数组实现连接运算符,这些数组开始有所启发.生成的代码首先将数组转换为ShortString实例.然后将它们转换为Delphi AnsiString实例.最后连接两个AnsiString实例.

现在,这将解释为什么WideChar数组的代码失败. ShortString类型仅支持AnsiChar元素,因此需要通过字符串支持例程的不同路径.可以假设Embarcadero设计者出于某种原因选择在实现Unicode支持时不支持这种形式的连接.

为了支持这个想法,请虑以下事项:

procedure Main;
var
  arrChar_1: arraY[0..254] of AnsiChar;
  arrChar_2: arraY[0..254] of AnsiChar;
  str: AnsiString;
begin
  str := arrChar_1 + arrChar_2;
end;

这编译.但是将254个上限中的任何一个更改为255并且代码无法编译(在所有版本的Delphi中)报告E2008不兼容的类型.这是因为数组现在超过了ShortString对象的最大长度.

至于如何将代码迁移到Unicode Delphi,我建议您只需将字符数组转换为字符串:

str := String(arrChar_1) + String(arrChar_2);

大佬总结

以上是大佬教程为你收集整理的无法在Delphi 10.2中将char数组赋值给字符串全部内容,希望文章能够帮你解决无法在Delphi 10.2中将char数组赋值给字符串所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。