利用可能な書籍の著者、名前、および数を含む「ブック」構造体があります。構造体をファイルに書き込むときのアクセス違反
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ファイルを作成して、その中に「books」を追加しています。私はここで間違って何をやっている
Access violation writing location 0xFFFFFEFE.
:私はこれを行うたび
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);
はしかし、私はエラーを取得しますか?
これらのAPI呼び出しの_all_からの戻り値を確認して、機能していることを確認する必要があります。 – theB
scanfエラーのほか、エラーチェックを行いますが、TCHARは古くから使われていますが、C++ IOではなく未処理のWin32 IOを使用し、初期化されていない構造体を書き出します。 –
私は可能な限り生のWin32メソッドを使用することになっています。私は選択肢がある場合、私はこれらを使用していないだろう。エラーチェックを追加します。 – VCib