@Vlad_beg

Как правильно сделатьзапись в файл сгенерированного пароля?

Имеется две структуры "Worker_struct" и "Login" из структуры Worker записываю в файл "worker_name" и генерирую пароль для данного пользователя. После чего читаю файл login.data, записываю данные в структуру "Login" и вывожу на экран.

Результат вывода на экран
938cca26126e4cf3a45c91bbb400f149.png

Подскажите, что делаю не так?

Код программы:

struct Worker_struct {
	char worker_name[90];
	double worker_salary;
	char worker_phone[90];
	char worker_email[90];
	char worker_position[90];
};

struct Login {
	char username[90];
	char password[90];
};


Worker_struct * readFile(int *workerCount);

int main()
{
	
	srand(time(NULL));
	Login login_struct;

	int workerCount;
	Worker_struct *worker_struct = readFile(&workerCount);

	ofstream file;
	file.open("login.data", ios::binary);

	int rNum;
	char alphanum[] =
		"0123456789"
		"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
		"abcdefghijklmnopqrstuvwxyz";

	for (int i = 0; i < workerCount; i++)
	{
		file.write((char*)worker_struct[i].worker_name,sizeof(worker_struct[i].worker_name));
		for (int i = 0; i < 6; ++i) {
			rNum = rand() % sizeof(alphanum);
			file << alphanum[rNum];
		}
			file << endl;
	}
	file.close();

	ifstream readFile;
	readFile.open("login.data", ios::binary);
	if (!readFile) cout << "Couldn't Open File\n";
	else {
		readFile.seekg(0, ios::end);
		int fileSize = readFile.tellg();
		int count = fileSize / sizeof(Login);
		readFile.seekg(0, ios::beg);
		Login * login_struct = new Login[count];
		readFile.read((char*)login_struct, count * sizeof(Login));
		readFile.close();

		for (int i = 0; i < count; i++)
		{
			cout << "Username: " << login_struct[i].username<< "\n";
			cout << "Password: " << login_struct[i].password << "\n";
			
		}
	}
	
	return 0;
}


Worker_struct *readFile(int *workerCount)
{
	ifstream readFile;
	readFile.open("coworker.data", ios::binary);
	if (!readFile) cout << "Couldn't Open File\n";
	else {
		readFile.seekg(0, ios::end);
		int fileSize = readFile.tellg();
		int count = fileSize / sizeof(Worker_struct);
		readFile.seekg(0, ios::beg);
		Worker_struct * worker_struct = new Worker_struct[count];
		readFile.read((char*)worker_struct, count * sizeof(Worker_struct));
		readFile.close();

		*workerCount = count;
		return worker_struct;
	}
}
  • Вопрос задан
  • 167 просмотров
Пригласить эксперта
Ответы на вопрос 1
@none7
for (int i = 0; i < 6; ++i) {
      rNum = rand() % sizeof(alphanum);
      file << alphanum[rNum];
}

У тебя тебя sizeof(Login::password) == 90, так откуда взялось 6? Кто будет дописывать остальные 84 байта? Кстати sizeof(alphanum) больше на 1 чем ты ожидаешь потому, что в Си все строки оканчиваются символом '\0'. Поэтому есть вероятность, что alphanum[rNum] == '\0'.

P.S. Если файл "login.data" уже существует к моменту readfile.open() и он больше чем нужно, то его размер останется прежним. А на хвосте файла будет чёрт знает что, мусор.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы