LINUX.ORG.RU

getopt_long


0

0

Имеем:
#include <stdio.h>
#include <sys/types.h>
#include <string.h>
#include <stdlib.h>
#include <getopt.h>
#include <time.h>
#include <ctype.h>

#define _XOPEN_SOURCE               // glibc 2 needs this
#define _GNU_SOURCE 1               // GLIBC

static struct option const opts[] =
{
        {"input-file", required_argument, NULL, "i"},
        {"output-file", required_argument, NULL, "o"},
        {"word-start", required_argument, NULL, "s"},
        {"word-length", required_argument, NULL, "l"},
        {"time", required_argument, NULL, "t"},
        {"help", no_argument, NULL, "h"},
        {"version", no_argument, NULL, "v"},
        {NULL, 0, NULL, 0}
};

main ...

int optcur;
int optionindex = -1;

while ((optcur = getopt_long(argc, argv, "i:o:s:l:hv", opts, &optionindex)) != -1)
        {
                switch (optcur)
                {
                        case 'i':
                                finputname = optarg;
                                break;
                        case 'o':
                                foutputname = optarg;
                                break;
                        case 's':
                                posofword = atoi(optarg);
                                break;
                        case 'l':
                                wordlen = atoi(optarg);
                                break;
                        case 't':
                                break;
                        case 'h':
                                usage(0);
                        case 'v':
                                break;
                        case ':':
                                printf("%s %s %s\n", "Флаг", optcur, "требует аргумент!");
                                usage(2);
                        case '?':
                                printf("%s %s\n", "Неизвестный флаг", optcur);
                                usage(2);
                        /*default:
                                usage(2);
                        */
                }


Компилим, запускаем:

root# ./a.out -h
-i, --input-file    Файл, который будет использоваться для ввода
-o, --output-file   Файл, который будет использоваться для вывода
-s, --word-start    Позиция слова
-l, --word-length   Длина слова
-h, --help          Показать это справочное сообщение
-v, --version       Показать текущую версию

root# ./a.out --help
root#

т.е. никакой ошибки не выдаётся, но и не выдаётся справочное сообщение - где ошибся?
★★★★★

на warning-и уже внимание обращать не модно?

в описании опций последнее поле в записи - символ, а не строка. замени двойные кавычки на одинарные и будет тебе счастье.

ananas ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.