未初始化的字符串偏移量

时间:2013-04-04 03:05:02

标签: php

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;
    }

您好。我正在构建一个身份验证类,上面的函数给了我一些悲伤,我不断收到错误消息:

  

注意:未初始化的字符串偏移量:16

回声用于测试目的。

我正在使用:

调用我的函数
 public static function Compile($Password, $Length){
        self::generateString($Length,$Password);
    }

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

当我运行我的脚本时,有时会生成没有错误消息;但是当多次运行(3-7)时,我会看到上面指定的消息?有时这个通知显示超过两行?

那么为什么在重复运行时会随机生成错误消息?当指定的参数没有改变时?

1 个答案:

答案 0 :(得分:2)

考虑这一行:

strlen($characters)

如果字符串长度为16并且您在0到16之间选择一个随机数,那么您可以选择在最后一个之后选择索引,这是什么都没有。你需要做到这一点

strlen($characters) - 1

因为索引实际上从0开始;