Delphi 使用for循环字符串[0]的字符串到字符数组始终为空
在上面的代码中,我试图找出为什么MasterKeyArray填充为{0,a,b}Delphi 使用for循环字符串[0]的字符串到字符数组始终为空,delphi,delphi-2010,Delphi,Delphi 2010,在上面的代码中,我试图找出为什么MasterKeyArray填充为{0,a,b} MasterKeyArray始终为0。最终,我只想要一个字符串主密钥的字符。主密钥[0]被分配为0时,我一直遇到问题。Masterkey字符串是从editbox收集的。text。字符串是1索引的,但数组是0索引的。您的循环正在尝试访问无效的字符串索引0,并且您也超出了数组的上限 请尝试以下方法: procedure TfmCypher.btn1Click(Sender: TObject); var i: int
MasterKeyArray始终为0。最终,我只想要一个字符串主密钥的字符。主密钥[0]被分配为0时,我一直遇到问题。Masterkey字符串是从editbox收集的。text。字符串是1索引的,但数组是0索引的。您的循环正在尝试访问无效的字符串索引0,并且您也超出了数组的上限 请尝试以下方法:
procedure TfmCypher.btn1Click(Sender: TObject);
var
i: integer;
MasterkeyArray: array of char;
Masterkey : string;
j : integer;
begin
Masterkey := edtKey.text;
setlength(MasterKeyArray, length(edtkey.text));
for i:= 0 to length(masterkey) do
begin
MasterkeyArray[i] := masterkey[i];
end;
一个更简单的解决方案是完全摆脱循环,改用Move:
字符串为1索引,但数组为0索引。您的循环正在尝试访问无效的字符串索引0,并且您也超出了数组的上限 请尝试以下方法:
procedure TfmCypher.btn1Click(Sender: TObject);
var
i: integer;
MasterkeyArray: array of char;
Masterkey : string;
j : integer;
begin
Masterkey := edtKey.text;
setlength(MasterKeyArray, length(edtkey.text));
for i:= 0 to length(masterkey) do
begin
MasterkeyArray[i] := masterkey[i];
end;
一个更简单的解决方案是完全摆脱循环,改用Move:
太棒了,谢谢!你能告诉我为什么字符串会出现这种情况吗?@user1868232:向后兼容性。Pascal字符串ShortString或字符串[255]将其长度存储在字节0中,字符串的第一个字符存储在字节1中。当Delphi 2中引入长字符串时,它们仍然基于1以与旧代码兼容,并且从那时起一直保持这种方式。直到XE3,也就是说,当添加{$ZEROBASEDSTRINGS}指令以可选地启用基于0的字符串索引时。它在默认情况下是关闭的,但在将来新的移动环境准备就绪时可能会打开。太棒了,谢谢!你能告诉我为什么字符串会出现这种情况吗?@user1868232:向后兼容性。Pascal字符串ShortString或字符串[255]将其长度存储在字节0中,字符串的第一个字符存储在字节1中。当Delphi 2中引入长字符串时,它们仍然基于1以与旧代码兼容,并且从那时起一直保持这种方式。直到XE3,也就是说,当添加{$ZEROBASEDSTRINGS}指令以可选地启用基于0的字符串索引时。默认情况下,它处于关闭状态,但将来在新的移动环境就绪时可能会打开。
procedure TfmCypher.btn1Click(Sender: TObject);
var
i: integer;
MasterkeyArray: array of Char;
Masterkey : string;
begin
Masterkey := edtKey.text;
SetLength(MasterKeyArray, Length(Masterkey));
if Masterkey <> '' then begin
Move(Masterkey[1], MasterKeyArray[0], Length(Masterkey) * SizeOf(Char));
end;
end;