2016-02-15 7 views
-1

Optarg всегда null. Сбой приложений.Optarg всегда ноль

static const char* const short_options = "a:h:p"; 
static const struct option long_options[] = 
{ 
    { "address", 1, NULL, 'a' }, 
    { "help",  0, NULL, 'h' }, 
    { "port",  1, NULL, 'p' } 
}; 

Я попытался добавить пустую строку в long_options, но это не помогло.

static const struct option long_options[] = 
{ 
    { "address", 1, NULL, 'a' }, 
    { "help",  0, NULL, 'h' }, 
    { "port",  1, NULL, 'p' }, 
    {0,    0, NULL, 0 } 
}; 

но это не помогло.

There - пример использования optarg используя. Я использую optarg так же, но получаю null.

do { 
     nextOption = getopt_long(argc, argv, short_options, long_options, NULL); 
     switch (nextOption) 
     { 
     case 'a': 
     { 
      //do something 
     } 
      break; 
     case 'h': 
      printf(usage_template); 
      exit(0); 
     case 'p': 
     { 
      long value; 
      char* end; 
      value = strtol(optarg, &end, 10);//OPTARG IS NULL 
      if (*end != '\0') 
      { 
       printf(usage_template); 
      } 
      port = (uint16_t)htons(value); 
     } 
      break; 
     case '?': 
      printf(usage_template); 
      exit(0); 
     case -1: 
      break; 
     default: 
      exit(0); 
     } 
    } while (nextOption != -1); 

Может ли кто-нибудь помочь мне с этой проблемой?

ответ

2

Похоже, что ваш параметр «p» не сопровождается двоеточием, поэтому getopt не ожидает, что у него будет аргумент.

+0

Есть ли способ проверить или исправить? –

+0

добавить двоеточие после p в short_options –

+0

> Я попытался добавить пустую строку в long_options, но это не помогло. Optarg также является нулевым для опции 'a' –