Смещение неинициализированной строки php

#php #string #initialization #offset #notice

#php #строка #инициализация #смещение #УВЕДОМЛЕНИЕ

Вопрос:

Я пишу свой собственный калькулятор на 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]) amp;amp; $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] amp;amp; is_numeric($string[$x]))
    {
        while (is_numeric($string[$x]))
        {
            $nbr2 .= $string[$x];
            $x  ;
        }
    }
    else
    {
        error_msg();
    }
}
  

Комментарии:

1. В какой строке выдается ошибка?

2. оно выглядит следующим образом: if ($string[$x 1] amp;amp; is_numeric($string[$x]))

3. Если вы хотите создать удобный арифметический вычислитель, при этом удаляя минимальное количество волос, вам нужно будет ознакомиться с алгоритмом маневровой площадки .

Ответ №1:

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

 while ($string[$x])
  

Для

 while ($x < strlen($string))
  

и изменить

 if ($string[$x   1] amp;amp; is_numeric($string[$x]))
  

Для

 if ($x   1 < strlen($string) amp;amp; is_numeric($string[$x]))
  

Комментарии:

1. Большое вам спасибо за ваш ответ 🙂 Но я хотел бы знать, есть ли разница в этом отношении между языком C и PHP, потому что на C я кодирую подобным образом, и я действительно не сталкиваюсь с проблемой, пока не узнаю..

2. В C в конце строки есть нулевой символ, и это то, что ищет этот тип теста. В PHP этого нет.