неопределенный lcfirst ()

Я использовал reinterpret_cast

reinterpret_cast нельзя использовать для этого. Ваше использование имеет неопределенное поведение. Следующее будет хорошо определено:

record r; // create a record object
std::memcpy(&r, line, sizeof r);

Предостережения:

  • Строки не заканчиваются нулем!
  • sizeof(RType) должно быть 1
  • [ 119] Входной буфер не должен быть короче sizeof r.

, но вместо этого я получаю следующее

r.m_recordname = "Netherlands3240382"

Netherlands3240382 не помещается внутри члена m_recordname, и поэтому это не может быть возможно быть состоянием объекта. Проблема должна заключаться в том, как генерируется вывод. Я подозреваю, что строка обрабатывается так, как если бы она была завершена нулем, несмотря на то, что это не так.

6
задан Ryan Bigg 16 October 2009 в 04:49
поделиться

2 ответа

Проверить версию: (PHP 5> = 5.3.0)

Очевидно, у вас версия ниже этой. :)

Используйте phpversion () , чтобы быстро проверить, какая у вас версия.

Однако, как указано в комментариях, эту функцию тривиально легко воспроизвести:

if(function_exists('lcfirst') === false) {
    function lcfirst($str) {
        $str[0] = strtolower($str[0]);
        return $str;
    }
}

Вы можете бросить приведенный выше код где-то в файле библиотеки / утилит вашего проекта, и он не сломается, если вы обновитесь до версии 5.3.0 в будущем.

18
ответ дан 8 December 2019 в 05:23
поделиться

На странице руководства PHP, которую вы связали:

(PHP 5> = 5.3.0)

Эта функция существует только при использовании PHP версии 5.3 или новее.

5
ответ дан 8 December 2019 в 05:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: