reagentSV
Гость
|
|
« : 10-08-2010 09:11 » |
|
Доброго времени суток. я перешрл на мелкосовтовский компилятор с gcc. Решил написать консольную программу. раньше я пользовался функция getopt(...) и getopt_long (). для получения и обработки (argc, argv[] )
какие есть стандартные функции в MFS для принятия параметров из командной строки (argc, argv[] )
благодарю за внимание.
|
|
« Последнее редактирование: 10-08-2010 09:46 от Джон »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 10-08-2010 09:16 » |
|
MFC, а не MFS )
например CWinApp::m_lpCmdLine; (theApp.m_lpCmdLine)
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #2 : 10-08-2010 09:52 » |
|
Решил написать консольную программу. какие есть стандартные функции в MFS для принятия параметров из командной строки (argc, argv[] ) Если имеется ввиду MFC, то в консольной программе он тебе не нужен, а параметры находятся (как ни странно) в массиве argv, который передаётся (как ни странно) в ф-ю main в качестве параметра. Соответственно доступ к ним: argv[0] argv[1] argv[2] ... и тд
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
reagentSV
Гость
|
|
« Ответ #3 : 10-08-2010 10:12 » |
|
примерчиком поделитесь
|
|
|
Записан
|
|
|
|
reagentSV
Гость
|
|
« Ответ #4 : 10-08-2010 10:15 » |
|
Решил написать консольную программу. какие есть стандартные функции в MFS для принятия параметров из командной строки (argc, argv[] ) Если имеется ввиду MFC, то в консольной программе он тебе не нужен, а параметры находятся (как ни странно) в массиве argv, который передаётся (как ни странно) в ф-ю main в качестве параметра. Соответственно доступ к ним: argv[0] argv[1] argv[2] ... и тд их надо от туда выкавыривать. а я хочу что бы функция возвращала структуру в виде ключей и значений прямо из командной строки.
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #5 : 10-08-2010 10:52 » |
|
их надо от туда выкавыривать. Я не знаю, что такое "от туда выкавыривать" и никогда не пользовался этой функцией. Сорри, gcc не знаю. а я хочу что бы функция возвращала структуру в виде ключей и значений прямо из командной строки. Структуру чего? Каких ключей? Мы наверное говорим о разных вещах. Я вот что имею ввиду, допустим твоя прога называется myprog, тогда: myprog parm0 parm1 parm2 parm3 где parm0 .. parm3 - параметры, помещаемые в массив argv. Какие ключи? Какие значения?
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
reagentSV
Гость
|
|
« Ответ #6 : 10-08-2010 11:17 » |
|
моя програ называеться myprog Тогда myprog --param=10 --param1 -- param=200 --param=FILE алгорит следующих действий в программе я вижу такой for (int i=0; i<=argc; i++ ) getopt (argc,argv, typestruct); и я получаю обратно структуру для каждого i значения struct { char *param; int val; void *file; }typestruct
Вот что то топо такого..
|
|
|
Записан
|
|
|
|
reagentSV
Гость
|
|
« Ответ #7 : 10-08-2010 11:20 » |
|
соответственно где struct { char *param; //имя параметра int val; // значение параметра , если он есть void *file; //указатель на фаил, если он есть }typestruct;
|
|
|
Записан
|
|
|
|
baldr
|
|
« Ответ #8 : 10-08-2010 11:33 » |
|
|
|
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #9 : 10-08-2010 12:29 » |
|
reagentSV, ну ты лентяй. Получается у программы только один параметр, с кучей полей данных? А откуда ф-я знает, что надо = в качестве разделителя использовать? Т.е. если я, например, вызову: myprog --param:10 --param1: -- param:200 --param:FILE то уже не будет работать? Это ж уже твоя логика. Да и ручками тут работы на пять минут, даже с возвращаемой структурой. Вот, baldr, золотой души человек, ведь не поленился, погуглил, нашёл. Эт наверное потому, что у него сегодня День варенья. Так что считай, что повезло.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
baldr
|
|
« Ответ #10 : 10-08-2010 12:37 » |
|
|
|
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
zuuuuk
Постоялец
Offline
|
|
« Ответ #11 : 10-08-2010 17:28 » |
|
благодарю за помощь. baldr c днем рождения
|
|
|
Записан
|
|
|
|
zuuuuk
Постоялец
Offline
|
|
« Ответ #12 : 10-08-2010 18:10 » |
|
у меня проблема с visual studio по сравнению с dec-cpp я пишу в dev-cpp printf ("%s\n", argv[1]); в консоли получаю первый параметр котрый забивал. любой длинны
если пользую висул студио cout<< argv[1]<< endl; или printf ("%s\n", argv[1]); в консоли он выдает только первый сивол параметра.
в чем спицифика. или я что то делаю не так.
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #13 : 10-08-2010 20:31 » |
|
Есть устойчивое подозрение, что виновен юникод. Какой тип имеет argv? Что будет, если сделать wprintf(L"%s\n", argv[1])?
|
|
|
Записан
|
|
|
|
Anchorite
Гость
|
|
« Ответ #14 : 11-08-2010 05:16 » |
|
Погляди boost::program_options. Может подойдет. Хотя для меня эта либа показалась слишком уж мудреной
|
|
« Последнее редактирование: 11-08-2010 05:19 от Anchorite »
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #15 : 11-08-2010 06:35 » |
|
Сорри, неправильно понял условие. Ключевое слово "первый символ". Согласен в Вадом - обрезка по нулю.
|
|
« Последнее редактирование: 11-08-2010 06:56 от Джон »
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
|