【发布时间】:2016-06-27 20:18:08
【问题描述】:
我正在德国网站 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 作为字符。
但是我认为我的程序会因为这个函数而崩溃。
所以我改变了:直到长度(结果)= strlength;
到:直到长度(结果)>= strlength;
确实有时是> strlength。
谁能解释为什么它更大?
它不应该更大,因为它一次只添加 1 个字符?
【问题讨论】:
-
Result在循环之前未初始化,因此长度溢出。Randomize只能在程序启动时初始化一次。 -
@LURD 所以 Result 被初始化为一个比 strlength 长的随机值,因此永远不会满足条件?
-
感谢@LURD。我想我应该写管理员,因为我花了几个小时试图找出我的程序冻结。再次感谢
-
请注意序数 48..57 代表 ASCII 字符 '0'..'9',(不是 '0'..'1')并且函数的结果从不包含一个“z”(序数 122),因为
function Random(const ARange: integer): integer返回一个数字 X,即0 <= X < ARange
标签: delphi