Неинициализированное смещение строки php - PullRequest
0 голосов
/ 21 марта 2019

Я пишу свой собственный калькулятор на PHP.

У меня проблема с моим кодом, потому что я не знаю, где я пытаюсь прочитать слишком далеко в строке. Так что если кто-нибудь может просветить меня ..

Точная ошибка, которую я получаю:

Уведомление PHP: смещение неинициализированной строки: 4 в /home/salim/Bureau/web/piscine_php/d01/ex11/do_op_2.php в строке 76

Вот код ниже:

function decoupe ($argv)
{
global $nbr1;
global $nbr2;
global $sign;
$string = NULL;
$string = trim($argv[1], " \t");
echo $string;
echo "\n";
$x = 0;
while($string[$x]) 
{
    if (is_numeric($string[0]) == false)
        error_msg();
    if (is_numeric($string[$x]) && $string[$x + 1])
    {
        while (is_numeric($string[$x]))
        {
            $nbr1 .= $string[$x];
            $x++;
        }
    }
    if (is_thisoperator(substr($string, $x)))
    {
        $sign .= $string[$x];
        $x++;
    }
    else
    {
        error_msg();
    }

    if ($string[$x + 1] && is_numeric($string[$x]))
    {
        while (is_numeric($string[$x]))
        {
            $nbr2 .= $string[$x];
            $x++;
        }
    }
    else
    {
        error_msg();
    }
}

1 Ответ

1 голос
/ 21 марта 2019

Не используйте $string[$x] как способ проверить, является ли $x допустимым индексом в строке. Он выводит предупреждение, когда $x находится вне строки. Вместо этого используйте $x < strlen($string). Так что поменяйте:

while ($string[$x])

до

while ($x < strlen($string))

и изменить

if ($string[$x + 1] && is_numeric($string[$x]))

до

if ($x + 1 < strlen($string) && is_numeric($string[$x]))
...