![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 30.01.2011
Сообщений: 231
|
![]()
Здравствуйте, есть программа которая разбирает командную строку, эта программа работает, но при определённых значения выдает ошибку сегментирования, помогите пожалуйста разобраться в чем дело.
Вот примеры значений командной строки при котороых программа работает и при которой не работает: Код:
Код:
Злостный анимешнег =^.^=
|
![]() |
![]() |
![]() |
#2 |
мальчик-помогай =)
Форумчанин
Регистрация: 16.09.2010
Сообщений: 522
|
![]()
немного не в тему, но вы сами определить что нужно..
вообще, очень многие программы не поймут ключ "-а -- -b" т.к. считают любой "-" началом нового ключа сам код тоже очень стрёмный т. к. зачем-то копирует остаток строки как параметр ключа, но это же не верно совсем! необходимо отдельно анализировать и вычленять параметры! именно поэтому ключ "-а --" считается двумя ключами, а не одним... в свою же очередь, верный разбор потребует знания имеет ли ключ параметры или нет, что усложняет код имхо, ошибка в неверной постановке задачи.. либо запретите указывать "-" в параметрах, либо нормально строку анализируйте P.S. в С/С++ я новичок, но вы, вроде, затираете значение arg без освобождения ранее выделенной памяти (лишь последнее значение удаляете).... сомневаюсь, что компилятор в строку "arg = malloc(..." добавляет освобождение памяти |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 30.01.2011
Сообщений: 231
|
![]()
Спасибо, я понял, что вы имели в виду. А по поводу malloc и free, я покачто сам мало знаю, но в книге вроде так было написано = ).
Не мог бы мне кто нибудь подсказать, как можно сделать так, что бы При вводе вот этой строки: Код:
Злостный анимешнег =^.^=
Последний раз редактировалось Демик; 30.03.2012 в 16:38. |
![]() |
![]() |
![]() |
#4 |
мальчик-помогай =)
Форумчанин
Регистрация: 16.09.2010
Сообщений: 522
|
![]()
вариант в лоб
параметры: -а -- -b действия: 1) натыкаемся на - 2) смотрим что идёт до первого пробела... это имя ключа 3) имя у нас "а" и мы знаем, что после него всегда идёт некий аргумент т. е. разбираем аргумент 3.а) смотрим что после имени ключа и пробела 3.б) если это кавычки, то ищем закрывающие кавычки 3.в) если это любой другой символ, то сохраняем его и все след. символы, пока не дойдём до конца строки или до "(пробел)-" обработку параметров лучше вынести в функцию, которая возвращаем длину параметра.... тогда мы просто начинаем искать след. ключ с позиции после параметра тут один важный нюанс: это когда комм. строка доступна как строка, а не массив (очень сомневаюсь, что для С++ это проблема).. если же мы обращаемся через argv, то тут, думаю, достаточно парами обращаться т. е. в argv[i] ключ, а в argv[i + 1] параметр его тупо выведите на экран содержимое argv и там уже станет ясно, как оно разбивает строку на части, а уже из этого станет ясно как Вам их "спаривать" ![]() |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 30.01.2011
Сообщений: 231
|
![]()
Спасибо, буду пробовать.
Злостный анимешнег =^.^=
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Не работает код, вылетает ошибка сегментирования | Avitella | Общие вопросы C/C++ | 6 | 21.12.2011 22:20 |
Ошибка сегментирования при вызове strcat | Кипящий чайник | Общие вопросы C/C++ | 4 | 05.03.2011 20:49 |
Ошибка сегментирования | Olechka555 | Общие вопросы C/C++ | 1 | 14.09.2010 08:50 |
передача параметров программе при запуске из командной строки | shurik_7866 | Общие вопросы Delphi | 3 | 03.06.2009 18:23 |
Типы аргументов при перегрузке функций | Arkuz | Общие вопросы C/C++ | 4 | 24.02.2009 01:16 |