[英]Segmentation Fault while appending and reading a binary file
我正在创建一个登录系统,它将用户名和密码保存在二进制文件中,因此如果匹配任何用户名或密码,它应显示“匹配!” 它可以正常使用txt文件,但在二进制模式下会出现分段错误
我试图将f.read()放在循环外面并手动读取。 当f.eof()变为true时我也尝试终止循环,但在所有情况下都会出现同样的问题
这是代码
#include<iostream>
#include<fstream>
using namespace std;
class Login {
public:
string username;
int pass;
Login() {
}
Login(string u,int p) {
username = u;
pass =p;
}
};
int main() {
fstream f("sarah.bin",ios::in|ios::app|ios::binary);
if(!f) cout<<"error"<<endl;
//adding data,take data from user
Login l("ahmed",123),k;
f.write((char*)&l,sizeof(l));
bool logged = false;
string s = "ahmed";
int p = 123;
f.seekg(0,ios::beg);
//verification
while(!f.eof() && f.read((char*)&k,sizeof(l))) {
if(k.pass==p && k.username == s) {
cout<<"logged";
logged = true;
break;
}
}
if(!logged)
cout<<"not matched";
f.close();
}
它没有给出预期的结果,但给出了分段错误,有时根本没有输出。
实际上问题是:我使用非POD数据类型.ie字符串导致错误,所以我做的解决方案是用字符数组替换字符串。 另一种解决方案是将其写入txt文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.