Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 读取二进制文件(C+;+;)时引发0xC0000005异常_C++_Windows_Visual Studio_Binaryfiles - Fatal编程技术网

C++ 读取二进制文件(C+;+;)时引发0xC0000005异常

C++ 读取二进制文件(C+;+;)时引发0xC0000005异常,c++,windows,visual-studio,binaryfiles,C++,Windows,Visual Studio,Binaryfiles,我正在尝试让用户登录和注册系统使用二进制文件来保存数据,并检查用户名和密码是否与保存的相同。在调用Create\u Login()和Write()时,甚至在调用Login()之后,它似乎都可以正常工作。当自己调用Login()时会出现问题。尝试读取用户名和密码时引发异常。我已经试着修复了一段时间,只是看不到它。任何帮助都将不胜感激 这是我的密码 Main.cpp int input; cin >> input; switch (input) { case 1:

我正在尝试让用户登录和注册系统使用二进制文件来保存数据,并检查用户名和密码是否与保存的相同。在调用
Create\u Login()
Write()
时,甚至在调用
Login()
之后,它似乎都可以正常工作。当自己调用
Login()
时会出现问题。尝试读取用户名和密码时引发异常。我已经试着修复了一段时间,只是看不到它。任何帮助都将不胜感激

这是我的密码

Main.cpp

int input;
cin >> input;

    switch (input) {
    case 1:
        file.Login("");
        break;

    case 2:
        file.Create_Login();
        break;
}
.h文件

struct Files {
    char username[50];
    char password[50];


    string CheckPassword;
    string CheckUsername;

public:
    void Write(string name);
    void Login(string name);
    void Create_Login();

    Files();
    ~Files();

public:

    ifstream ReadFile; // Read
    ofstream WriteFile; // Write
};
.cpp文件

Files::Files() {}

void Files::Login(string name) {
    cout << "\nEnter Username: " << flush; cin >> CheckUsername;
    cout << "Enter Password: " << flush; cin >> CheckPassword;

    name = CheckUsername;
    ReadFile.open(name + ".bin", ios::out | ios::binary);

   cout << "Your Username is: " << CheckUsername << ", " << "Your Password is: " << CheckPassword << endl; // debug line

    if (ReadFile.is_open()) {
        cout << "Opened file " + name + ".bin" << endl;

        ReadFile.read(reinterpret_cast<char*>(&username), sizeof(Files)); //Execption Thrown Here!!!!!
        ReadFile.read(reinterpret_cast<char*>(&password), sizeof(Files));
    
        if (CheckUsername == username && CheckPassword == password) {
            cout << "Access Granted" << endl;
        }
        else if (CheckUsername != username && CheckPassword != password) {
            cout << "Access Denined" << endl;
        }
        else {
            cout << "Error!!!" << endl;
        }
    }
    else {
        cout << "Could not open file: " + name << endl;
        cout << "File does not exist" << endl;
    } 
}

void Files::Create_Login() {
    cout << "Create UserName >> " << flush; cin >> username;
    cout << "\nCreate Password >> " << flush; cin >> password;

    Write(username);
}

void Files::Write(string name) {
    WriteFile.open(name + ".bin", ios::binary);

    if (WriteFile.is_open()) {
        WriteFile.write(reinterpret_cast<char*>(&username), sizeof(Files));
        WriteFile.write(reinterpret_cast<char*>(&password), sizeof(Files));
        WriteFile.close();
    }
    else {
        cout << "could not create file: " << name + ".bin" << endl;
    }
    Login(username);
}

Files::~Files() {
    cout << "Destructor Called" << endl;
    ReadFile.close();
}
Files::Files(){}
void Files::Login(字符串名称){
无法检查用户名;
无法检查密码;
name=CheckUsername;
ReadFile.open(name+“.bin”,ios::out | ios::binary);

无法异常已解决。通过更改

ReadFile.read(reinterpret_cast<char*>(&username), sizeof(Files)); 
ReadFile.read(reinterpret_cast<char*>(&password), sizeof(Files));
 
ReadFile.read(reinterpret_cast(&username),sizeof(Files));
ReadFile.read(reinterpret_cast(&password),sizeof(Files));

ReadFile.read(reinterpret_cast(&username),sizeof(username));
ReadFile.read(reinterpret_cast(&password),sizeof(password));

感谢您提供的信息

这将不起作用。您无法保存像这样的可复制类型。
文件
具有
std::string
成员、用户定义的析构函数等。请查找。如果仔细查看
sizeof(文件),这将不起作用
。如果其中一个字符串代表1000个字符怎么办?您认为
sizeof(Files)是
将是1000或更大?否。另外,谁或什么人建议读/写二进制文件?我多次看到这个错误,因此,有人或某些材料认为这是一个可行的方法。是的,它是可行的,但只有在存储的类型可以复制且不包含指针的情况下。不相关的有趣事实:
struct
默认值到
public
。无需声明所有内容
public
我看到您正在读取字符数组。但查看您的代码,您似乎使用了一些(错误的)代码,错误地尝试读取/写入
文件
对象,完全忘记删除
大小(文件)
并将其替换为
大小(密码)
。是的,修复了,谢谢。将
sizeof(文件)
更改为
sizeof(用户名)
sizeof(密码)
工作我很高兴您得到了解决方案,感谢您的分享,如果您将它们标记为答案,我将不胜感激,这将对其他社区有益。
 ReadFile.read(reinterpret_cast<char*>(&username), sizeof(username)); 
 ReadFile.read(reinterpret_cast<char*>(&password), sizeof(password));