2013-04-04 76 views
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; 
    } 

您好。我建立一个验证类,以及上面的功能是给我一些悲痛,我不断收到带有错误消息:未初始化的字符串偏移量

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

回声是有测试目的。

我打电话用我的功能:

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

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

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

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

+1

字符串是从零开始的,它们的长度从1开始......所以最后一个字符会给出错误的偏移 – 2013-04-04 03:13:45

回答

2

考虑这条线:

strlen($characters) 

如果字符串长度为16,你做一个随机数选择0 16之间,你给它来选择最后后的指数,这是没有的选项。您需要制作它

strlen($characters) - 1 

由于索引实际上从0开始;

+0

'[mt_rand(0,strlen($ characters)-1)];'仍然显示错误消息 – 2013-04-04 03:10:15

+0

当你print_r $字符时,它会产生一些东西,对吧?如果字符的长度为零,上述语句也会发生。 – 2013-04-04 03:12:23

+0

请不要考虑最后一条评论,我正在编辑错误的代码片段,而不是我正在编写的代码。它已经工作了,所以为了将来的参考,'strlen'在被调用时在长度上附加+1?因此告诉索引从-1开始? – 2013-04-04 03:15:23