Вам необходимо сообщить getopt()
о параметрах, которые требуют аргумента.Как описано в комментариях @xing, вы делаете это, помещая двоеточие в строку параметра после соответствующей буквы.Это позволяет getopt()
правильно обрабатывать сгруппированные параметры и распознавать неопционные параметры.Только если вы сделаете это, вы можете ожидать, что аргументы опции будут сообщены вам через optarg
.
. Вы заявляете в комментариях, что хотите указать необязательный аргумент опции.Стандарт POSIX getopt()
не предусматривает этого.В вашем конкретном случае непонятно, зачем вам это вообще нужно, что будет означать указание опции -t
без аргумента?Что программа должна использовать по умолчанию?Но это то, что он будет делать, если -t
будет вообще опущен.
Тем не менее, способ подойти к ситуации с POSIX getopt()
состоит в том, чтобы предоставить две отдельные опции, одну, которая принимает аргумент, и другую, которая не 'т.Например, вы можете использовать опцию -T
, чтобы обозначить все, что вы хотели -t
без опции, означающей (getopt(argc, argv, "t:Th")
).В качестве альтернативы, если вы хотите положиться на расширения GNU, вы можете указать необязательный аргумент option через двойное двоеточие (getopt(argc, argv, "t::h")
), но это менее переносимо и имеет немного другую семантику.