Я пытаюсь прочитать из двоичного файла, используя fstream, некоторые данные, которые я ранее там записал.
Проблема в том, что после перехода в конец функции отображается сообщение в теме
Код следующий:
ifstream in("contrib.bin", ios::in | ios::binary );
char *nume, dim;
in.read((char*)&dim, sizeof(int));
nume = new char[dim + 1];
in.read(nume, dim);
nume[dim] = '\0';
double imp;
in.read((char*)&imp, sizeof(double));
delete [] nume;
Теперь я сделал домашнее задание и искал эту проблему, но у других людей, которые сталкивались с этим, были массивы, тогда как моя переменная — простой символ.
Может кто-нибудь указать мне правильное направление, пожалуйста?
Код
char dim;
in.read((char*)&dim, sizeof(int));
определяет 1-байтовый символ, а затем читает sizeof(int)
байт (что, вероятно, будет больше, чем 1) в него. Это неверно и может повредить ваш стек.
Если вам нужно прочитать sizeof(int)
байты, объявить dim
как int
, В противном случае измените количество прочитанных байтов на 1. Было бы лучше, если бы вы также использовали sizeof(dim)
чтобы убедиться, что вы прочитали столько байтов, сколько вы предоставили для хранения:
in.read((char*)&dim, sizeof(dim));
in.read((char*)&dim, sizeof(int));
не является правильным, dim
только держит sizeof(char)
который один, но вы пытаетесь прочитать sizeof(int)
внутрь.
После этого все перчатки сняты.
Ну, вы определяете символ, а затем читаете в формате int. Это было бы первым выпуском
char *nume, dim;
in.read((char*)&dim, sizeof(char));