Ошибка сегментации при добавлении и чтении двоичного файла - PullRequest
0 голосов
/ 30 апреля 2019

Я создаю систему входа в систему, которая будет сохранять имена пользователей и пароли в двоичном файле. поэтому, если какое-либо имя пользователя или пароль совпадают, должно отображаться «совпало!» он отлично работает с TXT-файлом, но дает ошибки сегментации в двоичном режиме

Я попытался поместить f.read () вне цикла и прочитать его вручную. я также попытался завершить цикл, когда! f.eof () становится истиной но во всех случаях такая же проблема возникает

вот код

#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();
}

Он не дает ожидаемого результата, но дает ошибку сегментации и иногда вообще не выводит.

1 Ответ

0 голосов
/ 30 апреля 2019

На самом деле проблема заключалась в том, что я использовал не-POD тип данных .ie string, который вызывал ошибку, поэтому я решил заменить строку массивом символов.Другое решение - записать его в текстовый файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...