https://pastebin.com/Cz7Dti3N Полный рабочий кусок
void Admin::read_admins()
{
FILE* f;
f = fopen("admins", "rb");
fread(&Admin::admins_size, sizeof(int), 1, f);
fread(admins, sizeof(Admin), Admin::admins_size, f);
fclose(f);
for (int i = 0; i < Admin::admins_size; i++)
{
admins[i].login = decode_string(admins[i].login);
admins[i].password = decode_string(admins[i].password);
admins[i].permission = decode_string(admins[i].permission);
}
}
void Admin::write_admins()
{
for (int i = 0; i < Admin::admins_size; i++)
{
admins[i].login = code_string(admins[i].login);
admins[i].password = code_string(admins[i].password);
admins[i].permission = code_string(admins[i].permission);
}
FILE* f;
f = fopen("admins", "w+b");
fwrite(&Admin::admins_size, sizeof(int), 1, f);
fwrite(admins, sizeof(Admin), Admin::admins_size, f);
fclose(f);
for (int i = 0; i < Admin::admins_size; i++)
{
admins[i].login = decode_string(admins[i].login);
admins[i].password = decode_string(admins[i].password);
admins[i].permission = decode_string(admins[i].permission);
}
}
Это функции записи и считывания файла в массив админов.
string code_string(string str)
{
char* s;
s = new char[str.length() + 1];
strcpy(s, str.c_str());
for (unsigned int i = 0; i < str.length(); i++)
{
s[i] += code_key;
}
string s2(s);
delete[] s;
return s2;
}
string decode_string(string str)
{
char* s;
s = new char[str.length() + 1];
strcpy(s, str.c_str());
for (unsigned int i = 0; i < str.length(); i++)
{
s[i] -= code_key;
}
string s2(s);
delete[] s;
return s2;
}
Это код и декод.
Суть проблемы в том, что при считывании файла у меня вылетает Access violation writing location 0x0072006D.
Декод работает правильно и возвращает правильное значение, с таким же размером, как и ориг строка. Массив админов изначально размера 100 и Admin::admins_size это кол-во записанных админов.
При считывании даже первого админа именно на приравнивании admins[i].login = decode_string(admins[i].login);
вылетает. Там индекс i=0, массив размера 100. В 0 элементе уже есть значение строки в зашифрованном виде
User users[100];
Admin admins[100];
string currentLogin;
int code_key = 5;
Если убрать строки с кодом-декодом всё работает нормально, записывается и читает
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Дано натуральное число n (<= 100)Получить все простые числа, не превышающие это значение
Есть динамический массив объектов, как передать его в функцию и получить доступ к отдельному элементу?
То есть мне надо использовать библиотеку Arduino и запустить код в своей среде
Хочу чтобы вся анимация и все отображение виджета было в с++ коде Если упрощенното виджет представляет собой 10 окружностей на которых расположены...