程序冻结生成随机字符串

时间:2016-06-27 20:18:08

标签: delphi

我正在德国网站delphi-treff上学习delphi。

它们提供了生成随机字符串的功能。

https://www.delphi-treff.de/tipps-tricks/object-pascal/strings/zufallstring-generieren/

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;

你可以在这里看到:

if temp in [48..57{0-1}, 65..90{A-Z}, 97..122{a-z}] then

他们只把0-1,A-Z和a-z作为字符。

但是我觉得我的程序因为这个功能而崩溃了。

所以我改变了:直到length(result)= strlength;

to:until length(result)> = strlength;

确实有时候> strlength。

有人可以解释为什么它更大吗?

它不应该更大,因为它一次只能添加1个字符?

1 个答案:

答案 0 :(得分:4)

Result被视为隐式var参数,必须在使用前初始化。请参阅here

在这种情况下,未初始化的Result参数将导致长度溢出。

另一个问题,Randomize只应在程序启动时调用一次。