2016-05-21 3 views
-1

Я начал изучать C в университете, но только на один семестр. Мне интересно узнать немного больше об этом языке и запустить небольшое приложение командной строки. Я хочу проанализировать аргументы командной строки. Поскольку каждое приложение командной строки должно иметь дело с этим, интересно, кто-то когда-либо выпускал библиотеку, чтобы справиться с этим. Конечно, я мог бы сделать некоторые решения с операторами if-else или switch, но я думаю, что это становится более сложным, когда я хочу принимать команды, начинающиеся с «-» или «-», а также распечатывать список доступных команд, включая описания , Поскольку я хочу сделать свое приложение для Windows и Linux, я не могу использовать библиотеку GNU C, которая является только posix (но имеет помощник для обработки команд).Разбор аргументов в C

Есть ли хороший способ достичь тата или мне нужно начинать с нуля?

+0

[getopt] (http://linux.die.net/man/3/getopt) –

+0

Да. Для этого есть хороший способ. –

ответ

7

getopt поможет вам проанализировать аргумент командной строки.

Getopt: -

В Getopt человек странице

Синтаксис:

int getopt(int argc, char * const argv[], const char *optstring); 

Функция Getopt() разбирает аргументы командной строки. Его аргументы argc и argv - это аргумент count и array, переданный функции main() при вызове программы. Элемент argv, начинающийся с '-' (и не точно «-» или «-»), является элементом option. Символы этого элемента (кроме начального «-») являются символами параметров. Если getopt() вызывается повторно, он последовательно возвращает каждый из символов опции из каждого элемента опции.

Пример: -

#include <unistd.h> 
    #include <stdlib.h> 
    #include <stdio.h> 

    int 
    main(int argc, char *argv[]) 
    { 
     int flags, opt; 
     int nsecs, tfnd; 

     nsecs = 0; 
     tfnd = 0; 
     flags = 0; 
     while ((opt = getopt(argc, argv, "nt:")) != -1) { 
      switch (opt) { 
      case 'n': 
       flags = 1; 
       break; 
      case 't': 
       nsecs = atoi(optarg); 
       tfnd = 1; 
       break; 
      default: /* '?' */ 
       fprintf(stderr, "Usage: %s [-t nsecs] [-n] name\n", 
         argv[0]); 
       exit(EXIT_FAILURE); 
      } 
     } 

     printf("flags=%d; tfnd=%d; optind=%d\n", flags, tfnd, optind); 

     if (optind >= argc) { 
      fprintf(stderr, "Expected argument after options\n"); 
      exit(EXIT_FAILURE); 
     } 

     printf("name argument = %s\n", argv[optind]); 

     /* Other code omitted */ 

     exit(EXIT_SUCCESS); 
    } 

Попробуйте ссылку на getopt(3) человека странице, чтобы узнать больше о функции Getopt.

Смежные вопросы