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

Hello. Я строй класса аутентификации, а функция выше дает мне некоторую печаль, я постоянно получаю представлен с сообщением об ошибке:Неинициализированное смещение строки

Примечания: Uninitialized строки смещении: 16

эха есть для в целях тестирования.

Я зову свою функцию с помощью:

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

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

Когда я бегу мой сценарий, иногда он генерирует без сообщений об ошибках; но при запуске несколько раз (3- 7) мне представляется сообщение, как указано выше? и иногда это уведомление показывает более двух строк?

Так почему же сообщение об ошибке генерируется случайным образом при повторном запуске? когда указанные аргументы не меняются?

+1

строки основаны на нулевом значении, их длина начинается с 1 ... поэтому последний символ будет давать неправильное смещение –

ответ

2

рассмотрит следующую строку:

strlen($characters) 

, если длина строки 16 и вы делаете случайное число выбора между 0 и 16, вы даете ему возможность выбрать индекс после последнего, который ничего. Вам необходимо сделать это

strlen($characters) - 1 

Поскольку индекс фактически начинается с 0;

+0

'[mt_rand (0, strlen ($ characters) -1)];' все еще отображается с сообщениями об ошибках –

+0

когда вы печатаете_r $ символы, он что-то производит, не так ли? Вышеприведенное утверждение также произойдет, если символы имеют длину, равную нулю. –

+0

Пожалуйста, не обращайте внимания на последний комментарий, я редактировал неправильный фрагмент, а не код, который я рассматривал. Это сработало, поэтому для будущей справки «strlen» добавляет +1 к длине при вызове? следовательно, указав индекс на -1? –

Смежные вопросы