Разбор вариантов с бинарными масками - PullRequest
0 голосов
/ 20 февраля 2019

и добрый вечер!В настоящее время я создаю исполняемый файл для Linux.Однако при разборе параметров моего исполняемого файла я сталкиваюсь с ошибками.

Я не понимаю, почему параметр -p проходит условия проверки.

Файл заголовка моего проекта:

# define O_LONG         0x6c // -l
# define O_RECUR        0x52 // -R
# define O_ALL          0x61 // -a
# define O_SORT         0x72 // -r
# define O_R_SORT       0x74 // -t

# define O_MSK_LONG             1
# define O_MSK_REC              2
# define O_MSK_ALL              4
# define O_MSK_SORT             8
# define O_MSK_R_SORT           16

Моя функция, которая анализирует параметры: (option -> аргумент программы число X, а options - указатель на мой результат)

int     parse_option(int *options, char *option)
{
    char    flag;

    option++; // To pass the first character -
    while ((flag = *(char*)option))
    {
        if ((O_ALL & flag) == flag)
            *options |= O_MSK_ALL;
        else if ((O_RECUR & flag) == flag)
            *options |= O_MSK_REC;
        else if ((O_SORT & flag) == flag)
            *options |= O_MSK_SORT;
        else if ((flag & O_R_SORT) == flag)
            *options |= O_MSK_R_SORT;
        else if ((O_LONG & flag) == flag)
            *options |= O_MSK_LONG;
        else {
            printf("command: invalid option -- '%c'\n", flag);
            return (-1);
        }
        printf("%c %i\n", flag, *options);
        option++;
    }
    return (1);
}

1 Ответ

0 голосов
/ 20 февраля 2019

«r» равно 0x72, а «p» равно 0x70, поэтому, если flag = 0x70, то flag & O_SORT = 0x70 & 0x72 = 0x70 = flag.Вам следует изменить условия на if (flag == O_SOMETHING) {...}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...