У меня есть структура «book», содержащая автора, имя и количество доступных книг.Нарушение прав доступа при записи struct в файл
struct book {
TCHAR author[32];
TCHAR name[32];
SHORT count;
void insert() {
cout << "Book author: "; wscanf_s(L"%s", author, _countof(author));
cout << "Book name: "; wscanf_s(L"%s", name, _countof(name));
cout << "Book count: "; wscanf_s(L"%i", count);
}
void get() {
cout << "Book info: " << endl;
wprintf(L"\nAuthor - %s", author);
wprintf(L"\nName - %s", name);
wprintf(L"\nCount - %i", count);
cout << endl;
}
};
Задача заставила меня создать файл DAT, а затем добавить в него «книги».
HANDLE hFile = CreateFile(_TEXT("C:\\Students\\book.dat"), GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
SetFilePointer(hFile, 0, 0, FILE_END);
book newBook;
DWORD bytesWritten;
newBook.insert();
WriteFile(hFile, &newBook, sizeof(book), &bytesWritten, NULL);
FindClose(hFile);
Однако всякий раз, когда я делаю это, я получаю сообщение об ошибке:
Access violation writing location 0xFFFFFEFE.
Что я здесь делаю неправильно?
Вы действительно должны проверять возвращаемые значения из _all_ этих вызовов API, чтобы убедиться, что все работает. – theB
Помимо ошибки scanf, вы выполняете проверку ошибок, вы используете TCHAR, который давно устарел, вы используете необработанный Win32 IO, а не C++ IO, и записываете неинициализированную структуру. –
Я должен использовать исходные методы Win32, когда это возможно. Я бы не использовал их, если бы у меня был выбор. Будет добавлена проверка ошибок. – VCib