报错 Notice: Uninitialized string offset 是什么原因?

报错 Notice: Uninitialized string offset 是什么原因?

我脚本的目的是为了获取8位随机数字,但出现以下错误提示:
Notice: Uninitialized string offset: 10 in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\test\pub.php on line 46

但是后边程序正常运行。主要代码如下:
class activeCodeObj
{
function getCode ($length = 32, $mode = 0)
{
switch ($mode) {
case '1':
$str = '1234567890';
break;
default:
$str = 'abcdefghijklmnopqrstuvwxyz';
break;
}

$result = '';
$l = strlen($str);
$num=0;
for($i = 0;$i < $length;$i ++){
$num = rand(0, $l);
$a=$str[$num]; ////////////出错的位置就是这里!
$result =$result.$a;
}
return $result;
}
}

$code = new activeCodeObj;
$picchangename = $code->getCode(8,1);


经测试发现,如果$picchangename 的结果刚好够8位,就不报错,但当其值位数不足8位时候,就开始报错提示:
Notice: Uninitialized string offset: 10 in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\test\pub.php on line 46
请各位高手指点了!

你的问题不是出在 “$a=$str[$num]; ////////////出错的位置就是这里!”

Notice: Uninitialized string offset:这句话的意思是你的数组下标越界了。

只拿 $mode=1 说明

当$mode=1时 $str的下标为 0到9;

而在你用的$l=strlen($str)后 $l=10 ;

所以你再用rand(0,$l)得到的数值为[0,10];
所以当 rand() 取到10后,你就会出错
原因:你并没有定义$str[10]这个值,你的值只到$str[9];


解决办法:

        $l=strlen($str)-1;