Если ваше задание не только для обработки обработки аргументов, вы можете посмотреть getopt
- это стандартный анализатор библиотек для аргументов.
Что касается мяса вашего вопроса, есть много вариантов, и вы можете использовать sscanf
как часть этого, но вам не обязательно.
Чтобы разобрать один аргумент, который вы упомянули, необходимо выполнить следующее: проверить, начинается ли аргумент с -i, извлекать данные из аргумента.
Самый простой способ проверить, если аргумент начинается с -i является:
if (argv[1][0] == '-' && argv[1][1] == 'i')
В качестве альтернативы, если у вас есть много вариантов аргументов, все, начиная с «-», вы можете что-то вроде:
char * i = NULL;
char * o = NULL;
char * s = NULL;
for (int i = 1; i < argc; ++i) {
if (argv[i][0] == '-') {
switch(argv[i][1]) {
case 'i':
i = argv[i][2];
break;
case 's':
s = argv[i][2];
break;
case 'o':
o = argv[i][2];
break;
default:
cerr << "Unknown option: " << argv[i][1];
}
} else {
cerr << "Error: all options must begin with '-'";
}
Обратите внимание, я использую ARGV [], а не 0. ARGV [0] всегда является имя исполняемого файла.
Самый быстрый способ извлечь остальную часть аргумента просто указатель арифметика:
char * filename = argv[1] + 2; // (Or you could equivalently say = &argv[1][2]
Это наиболее эффективный - это повторное использование строк, которые уже в ARGV. Если вы планируете на изменение строки вокруг, вы бы лучше с зЬгсру:
char * filename = (char *)malloc(strlen(argv[1]) - 2);
strcpy(filename, argv1 + 2);
// and eventually you'd have to free(filename)...
Поиграйте и поэкспериментируйте со всеми строковыми функциями. Вы найдете их важными для всех ваших более поздних программ.
очень описательный, благодаря много за помощь. Выученные лоты здесь. – Robolisk
Хотя, я столкнулся с проблемой. Я могу ввести несколько аргументов в одну строку. для exmaple: -isomebinaryfile.bin -oOutputfilename -srec – Robolisk
проверьте «Альтернативно, если у вас есть множество аргументов». Надеюсь, вам должно быть очевидно, как дальше оттуда, если у вас есть дополнительные возможности. –