0
protected static function generateString ($length = 50, $Password){
        $characters = $Password;
        $string = '';

        for ($p = 0; $p < $length; $p++) {
            $string .= $characters[mt_rand(0, strlen($characters))]; // Error Line
        }
        echo $string;
    }

こんにちは。私は認証クラスを構築していますが、上記の関数は私にいくつかの悲しみを与えています.エラーメッセージが表示され続けています:

Notice: 初期化されていない文字列のオフセット: 16

エコーはテスト目的で存在します。

次を使用して関数を呼び出しています。

 public static function Compile($Password, $Length){
        self::generateString($Length,$Password);
    }

Auth::Compile('testi ngpassword', 10);

スクリプトを実行すると、エラー メッセージが表示されないことがあります。しかし、複数回 (3 ~ 7 回) 実行すると、上記のメッセージが表示されますか? この通知が 2 行にまたがって表示されることがあります。

では、繰り返し実行するとエラー メッセージがランダムに生成されるのはなぜですか? 指定された引数が変更されていない場合は?

4

1 に答える 1

2

次の行を検討してください。

strlen($characters)

文字列の長さが 16 で、乱数を 0 から 16 の間で選択する場合、最後にインデックスを選択するオプションが与えられますが、これは何もありません。あなたはそれを作る必要があります

strlen($characters) - 1

インデックスは実際には 0 から始まるため、

于 2013-04-04T03:08:45.610 に答える