我在德国网站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个字符?
Result'在循环之前未被初始化,因此长度溢出。 'Randomize'只能在程序启动时初始化一次。 –
@LURD等结果得到一个随机值的初始化比字符串长,因此永远不会符合标准? – Thomas
请参阅[Delphi中'Result'的默认值是什么?](http://stackoverflow.com/questions/5336863/what-is-the-default-value-of-result-in-delphi)。 –