Почему (char *) используется в функции write () в C ++?

0
person pers;
pers.getData();
fstream fs("person.txt", ios::out | ios::in | ios::binary | ios::app);
fs.write((char*)&pers, sizeof(pers));

Я пытаюсь понять, почему адрес объекта (& pers) должен быть отнесен к указателю на символ во время записи в файл?

  • 1
    потому что синтаксис write() требует, чтобы его первый аргумент был char *
  • 0
    Спасибо за ваш ответ! Что происходит при записи объекта в двоичном режиме, когда адрес объекта приводится к указателю на символ?
Показать ещё 8 комментариев
Теги:

2 ответа

3

Потому что то, как объявляется write:

basic_ostream& write(const char_type* s, streamsize n);

Он записывает массив символов в поток. Если вы хотите (ab) использовать его для написания байтов какого-либо другого типа, вам понадобится хитрость, чтобы притворяться массивом символов.

Лично я бы использовал reinterpret_cast: это немного менее опасно и более очевидно, чем приведение в стиле C.

  • 0
    Кроме того, запись байтов определенного пользователем типа может быть опасной, если это не POD, верно?
  • 0
    @ 0x499602D2: Письмо безопасно. Чтение и попытка переосмыслить байты как нетривиальный объект опасно.
1

потому что fstream.write требует char* качестве первого аргумента.

ostream& write (const char* s, streamsize n);
  • 1
    Нет, это не требует строки. Требуется указатель на символ, и по замыслу принимает указатели на то, что не может быть названо строкой любым разумным определением «строки».

Ещё вопросы

Сообщество Overcoder
Наверх
Меню