1
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 です。最終的には、文字列マスターキーの charArray が必要です。masterkey[0] に #0 が割り当てられるという問題が発生し続けました。マスターキー文字列は editbox.text から収集されます。

4

1 に答える 1

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;
于 2013-03-17T23:56:42.180 に答える