使用for循环字符串[0]的字符串到Char数组始终为空

时间:2013-03-17 22:27:25

标签: delphi delphi-2010

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收集的。

1 个答案:

答案 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;