Я использовал reinterpret_cast
blockquote>
reinterpret_cast
нельзя использовать для этого. Ваше использование имеет неопределенное поведение. Следующее будет хорошо определено:record r; // create a record object std::memcpy(&r, line, sizeof r);
Предостережения:
- Строки не заканчиваются нулем!
- [ 119] Входной буфер не должен быть короче
sizeof(RType)
должно быть 1sizeof r
.
, но вместо этого я получаю следующее
blockquote>r.m_recordname = "Netherlands3240382"
Netherlands3240382
не помещается внутри членаm_recordname
, и поэтому это не может быть возможно быть состоянием объекта. Проблема должна заключаться в том, как генерируется вывод. Я подозреваю, что строка обрабатывается так, как если бы она была завершена нулем, несмотря на то, что это не так.
Проверить версию: (PHP 5> = 5.3.0)
Очевидно, у вас версия ниже этой. :)
Используйте phpversion ()
, чтобы быстро проверить, какая у вас версия.
Однако, как указано в комментариях, эту функцию тривиально легко воспроизвести:
if(function_exists('lcfirst') === false) {
function lcfirst($str) {
$str[0] = strtolower($str[0]);
return $str;
}
}
Вы можете бросить приведенный выше код где-то в файле библиотеки / утилит вашего проекта, и он не сломается, если вы обновитесь до версии 5.3.0 в будущем.
На странице руководства PHP, которую вы связали:
(PHP 5> = 5.3.0)
Эта функция существует только при использовании PHP версии 5.3 или новее.