новый вопрос.
Когда я передаю в структуру данные и вывожу их на консоль, по какому то волшебному образу
он передает символы которые не должны входить в символьный массив char author[12] .
Должно выводить: Зосимов Е Ж
Алсу Глебовна Гедеонова
Но выводит все слитно: Зосимов Е Ж Алсу Глебовна Гедеонова
Я посмотрел и действительно char author[12] имеет макс 12 элементов на который ссылается указатель.
Почему у меня author хранит в себе больше элементов чем положено и при этом корректно все работает и отображается, когда размер массива 12 элементов ?
Вот сам код
struct User{
char author[12];
char title[32];
char publisher[16];
short yearPublisher;
short countPage;
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
std::ifstream stream("BASE1.dat", std::ios::in | std::ios::binary);
User user;
QString str;
QTextCodec* codec = QTextCodec::codecForName("CP866");
QTextDecoder* decoder = codec->makeDecoder();
stream.read(reinterpret_cast<char*>(&user), sizeof(User));
while(!stream.eof()){
str = decoder->toUnicode(user.author);
qDebug() << decoder->toUnicode(user.author) << " "
"\n" << decoder->toUnicode(user.title) <<
"\n" << decoder->toUnicode(user.publisher) <<
"\n" << QString::number(user.yearPublisher) <<
"\n" << QString::number(user.countPage) << "\n\n";
stream.read(reinterpret_cast<char*>(&user), sizeof(User));
}
return a.exec();
}
повезло
Вот же классно !)
Зачем ты используешь массивы для строк, если есть std::string?
> reinterpret_cast Ты знаешь что это и зачем?
Эта штука позволяет кастить пользовательский тип в char* указатель
Не надо использовать того, чего ты не знаешь
Это она тоже может, но это наверное 1% от того, что умеет на самом деле
Ну я прочитал это из книги. Сейчас залез в инет и прочитал что позволяет кастить несовместимые типы. Но саму мою проблему это не объясняет как решить
Я тебе уже задал наводящие вопросы
Пол Дейтл Харви дейтал - Как программировать на c++
https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list Книгу надо брать из этого списка
Обсуждают сегодня