преобразовать char * в структуру в c ++

Соответствует ли значение CASE_INSENSITIVE ?

-4
задан Fawad 20 February 2019 в 14:32
поделиться

3 ответа

Предполагая, что RType является типом перечисления с поддержкой char (или псевдонимом для некоторого типа char), вы можете memcpy внести свой вклад в объект record. Вы также можете заставить ваш компилятор делать то, что вы намереваетесь с помощью reinterpret_cast.

Однако проблема, с которой вы сталкиваетесь, звучит так, как будто вы наблюдаете значения в этом record объекте с помощью функций, которые принимают строки с нулевым символом в конце. Вместо этого вы должны использовать функции, которые принимают длину.

printf("r.m_rectype = \"%d\"", r.m_rectype);
printf("r.m_recordname = \"%11.11s\"", r.m_recordname);
printf("r.m_recordNo = \"%d\"", r.m_recordNo);
printf("r.m_record_date = \"%6.6s\"", r.m_record_date);
0
ответ дан Caleth 20 February 2019 в 14:32
поделиться

Я использовал 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, и поэтому это не может быть возможно быть состоянием объекта. Проблема должна заключаться в том, как генерируется вывод. Я подозреваю, что строка обрабатывается так, как если бы она была завершена нулем, несмотря на то, что это не так.

0
ответ дан eerorika 20 February 2019 в 14:32
поделиться

Строго говоря, Стандарт не дает никаких гарантий относительно заполнения между элементами a struct, за исключением того, что в начале не будет заполнения. Таким образом, даже если ваша конкретная структура вряд ли будет содержать отступы - будучи (я предполагаю) всеми типами символов, для безопасности вы можете сделать что-то вроде этого: быть очень быстрым, потому что pos_copy должно быть хорошо встроено.

0
ответ дан Galik 20 February 2019 в 14:32
поделиться
Другие вопросы по тегам:

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