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;
在上面的代码中,我试图找出为什么MasterKeyArray填充为{#0,a,b} MasterKeyArray总是#0。最后我只想要一个字符串masterkey的charArray。我一直遇到masterkey [0]被分配#0的问题。 Masterkey字符串是从editbox.text收集的。
答案 0 :(得分:4)
字符串是1索引的,但是数组是0索引的。你的循环试图访问字符串索引0,这是无效的,你也超过了数组的上限。
请改为尝试:
procedure TfmCypher.btn1Click(Sender: TObject);
var
i: integer;
MasterkeyArray: array of Char;
Masterkey : string;
begin
Masterkey := edtKey.text;
SetLength(MasterKeyArray, Length(Masterkey));
for I := 1 to Length(MasterKey) do
begin
MasterkeyArray[I-1] := Masterkey[I];
end;
end;
一个更简单的解决方案是完全摆脱循环并改为使用Move()
:
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;