【问题标题】:Uninitialized string offset php未初始化的字符串偏移量php
【发布时间】:2019-08-11 19:15:45
【问题描述】:

我正在用 PHP 编写自己的计算器。

我的代码有问题,因为我不知道要在字符串中读取的位置太远。所以如果有人能启发我..

我得到的确切错误是:

PHP 注意:未初始化的字符串偏移量:/home/salim/Bureau/web/piscine_php/d01/ex11/do_op_2.php 第 76 行中的 4

下面是代码:

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();
    }
}

【问题讨论】:

  • 哪一行出现错误?
  • 出现这个:if ($string[$x + 1] && is_numeric($string[$x]))
  • 如果您想制作一个可用的算术评估器,同时只拔出最少的头发,您将希望与Shunting-Yard algorithm 友好相处。

标签: php string initialization offset notice


【解决方案1】:

不要使用$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]))

【讨论】:

  • 非常感谢您的回答 :) 但我想知道 C 语言和 PHP 之间在这种方式上是否有区别,因为在 C 中我的代码是这样的,我真的不是遇到问题直到知道..
  • 在 C 语言中,字符串末尾有一个空字符,而这正是这种类型的测试所要寻找的。 PHP 没有。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-07
  • 1970-01-01
相关资源
最近更新 更多