私はドイツのサイトdelphi-treffでdelphiを学んでいます。ランダムな文字列の生成でフリーズするプログラム
これらは、ランダムな文字列を生成する関数を提供します。
function RandomString(strlength: integer): string;
var
temp : integer;
begin
randomize;
repeat
temp := random(122); //ggf. erhöhen
if temp in [48..57{0-1}, 65..90{A-Z}, 97..122{a-z}] then
//Kann um beliebige ASCII-Zeichen erweitert werden,
//ggf. den Wert in Random hochsetzen
result := result + Chr(temp);
until length(result) = strlength;
end;
あなたがここに見ることができるよう
https://www.delphi-treff.de/tipps-tricks/object-pascal/strings/zufallstring-generieren/:彼らは唯一の0-1を置く
if temp in [48..57{0-1}, 65..90{A-Z}, 97..122{a-z}] then
、-Zや文字など-Z。
しかし、私はこの機能のために私のプログラムがクラッシュしたと思っていました。
私は変更されました:until length(result)= strlength;
to:length(result)> = strlength;
実際には> strlengthです。
なぜそれが大きいのか説明できますか?
一度に1文字しか追加しないので、それほど大きいはずはありませんか?
ループの前に「結果」が初期化されていないため、長さがオーバーフローします。 'Randomize'はプログラムの開始時に一度だけ初期化されるべきです。 –
@ LURDしたがって、結果はstrlengthよりも長いランダム値で初期化されるため、基準を満たしませんか? – Thomas
[Delphiの 'Result'のデフォルト値は何ですか?](http://stackoverflow.com/questions/5336863/what-is-the-default-value-of-result-in-delphi)を参照してください。感謝@LURD。 –