Здравствуйте. Мне нужно определить аргументы командной строки и исходя из полученых команд проделать некие действия. Запуская программу из параметрами разными параметрами я получаю сообщение Segmentation fault
.
Помогите понять, что я делаю неверно. Зарание извиняюсь за столь ужасный код.
int main(int argc, char* argv[]) {
MySniffer snf;
if(argc == 1 || argc == 3 || argc > 4) {
cout << "Wrong options. Read program options.\n" << snf.usage_inf() << endl;
exit(1);
}
for(int i = 1; i < argc; ++i) {
if(strcmp(argv[i], "select") == 0) {
cout << "hello" << endl;
for(int j = i; j < argc; ++j){
if(strcmp(argv[j], "iface") == 0){
string str = string(argv[3]);
snf.setIface(str);
snf.pkgMonitor(snf.get_cmd());
}
}
}
if(strcmp(argv[i], "show") == 0) {
for(int j = i; j < argc; ++j) {
if(strcmp(argv[j], " count")){
if(snf.select_data(argv[2])==1){
cout << "There is no adress " << argv[2] << " or data base wasn't created.\n"
<< "Check if you select network interface.\n";
}
snf.pkgMonitor(snf.get_cmd());
}
}
}
if(strcmp(argv[i], "--help") == 0) {
for(int i = 0; i < argc; ++i)
cout << argv[i] << endl;
cout << snf.usage_inf() << endl;
snf.pkgMonitor(snf.get_cmd());
}
if(strcmp(argv[i], "stop") == 0) {
cout << "Packets are not sniffed.\n" << endl;
snf.set_cmd(true);
}
if(strcmp(argv[i], "start") == 0){
if(snf.isIfaceDeff()){
cout << "Packets are being sniffed from now on\n" << endl;
}
else {
cout << "You first need to select your interface. Read program options.\n" << snf.usage_inf() << endl;
}
snf.set_cmd(false);
snf.pkgMonitor(snf.get_cmd());
}
}
return 0;
}
У вас могут быть только argc==2
и argc==4
, судя по строчке
if(argc == 1 || argc == 3 || argc > 4) {
Один из вопросов - что будет тут
if(strcmp(argv[j], "iface") == 0){
string str = string(argv[3]);
при argc == 2
?...
То же и с
if(snf.select_data(argv[2])==1){
cout << "There is no adress " << argv[2] << " or data base wasn't created.\n"
И, кстати, в
if(strcmp(argv[i], "select") == 0) {
cout << "hello" << endl;
for(int j = i; j < argc; ++j){
if(strcmp(argv[j], "iface") == 0){
какой смысл сравнивать с iface
тот аргумент, который заведомо равен select
- я имею в виду, начинать с int j = i
?
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть класс, в котором есть поле вектора из unique_ptr (Animals - тоже класс), а так же методы чтения и записи в файл этого вектора классаВот фрагмент...
У меня никак не получается остановить работу демона, что я и пытаюсь сделать с помощью параметра stopПодскажите, как лучше это сделать? И почему...
Здравствуйте! Пишу простой проводник и столкнулся с такой библиотекойВопрос такой: для написания проводника ею лучше пользоваться? И для...
Я вывожу значение постоянно обновляемой переменной в терминал в виде: