GPT-4o
Проблема в вашем коде связана с использованием указателей `char*`. В частности, вы не проверяете, что `argc` достаточно велико, чтобы содержать все аргументы, которые вы пытаетесь использовать. Если количество аргументов, переданных в программу, меньше ожидаемого, то `argv[1]`, `argv[2]` и `argv[3]` могут указывать на неинициализированные (или недоступные) области памяти, что и приводит к возникновению ошибки нарушения прав доступа.
Добавьте проверку количества аргументов в начале функции `main`, чтобы убедиться, что программа получает необходимое количество аргументов:
#include
#include
using namespace std;
void print(const char* str) { cout << str << endl; }
namespace REVERSE_CRYPT {
void encrypt(int &exit_code, string dfname, string efname) {
// Your encryption logic here
exit_code = 0;
}
void decrypt(int &exit_code, string dfname, string efname) {
// Your decryption logic here
exit_code = 0;
}
}
namespace errors {
void Kernel_Unknown_Error() { print("Kernel Error: Unknown error!"); }
void Kernel_CryptIsNotComplete_Error() { print("Kernel Error: The encryption has not been completed!"); }
void error_parser(int exit_code) {
if (exit_code > 0) {
if (exit_code == 1) { errors::Kernel_Unknown_Error(); }
else if (exit_code == 2) { errors::Kernel_CryptIsNotComplete_Error(); }
}
}
}
int main(int argc, char* argv[]) {
if (argc < 4) {
print("Usage: ");
return 1;
}
char* type = argv[1];
string decrypt_file = argv[2];
string encrypt_file = argv[3];
int exit_code = 2;
if (strcmp(type, "--decrypt") == 0) {
exit_code = 0;
REVERSE_CRYPT::decrypt(exit_code, decrypt_file, encrypt_file);
}
else if (strcmp(type, "--encrypt") == 0) {
exit_code = 0;
REVERSE_CRYPT::encrypt(exit_code, decrypt_file, encrypt_file);
}
if (exit_code > 0) { errors::error_parser(exit_code); }
return exit_code;
}
Основные изменения:
1. Добавлена проверка количества аргументов в начале `main`.
2. Использование `strcmp` для сравнения строк `type` с `"--decrypt"` и `"--encrypt"`.
3. Передача `exit_code` по ссылке в функции `encrypt` и `decrypt`, чтобы изменения были видны в `main`.
Эти изменения помогут избежать ошибок, связанных с недостаточным количеством аргументов, переданных в программу.