Как проверить 2 застрявших argc в C

Я делаю очень простой программный код.

Во-первых, у него есть опция «-num» в качестве второго аргумента. Если вы введете что-либо в 3-й аргумент, программа просто скажет, что введен 3-й аргумент.

Вот примеры входов и выходов.

Введите командную строку 1:

./test -num

Выход 1

-num

Введите командную строку 2:

./test -num AnythingHere

Выход 2

-num 3rdArgcEntered

Я также хочу, чтобы следующая командная строка с прикрепленным argc (-num и AnythingHere склеены вместе) давала тот же вывод, что и вывод 2:

./test -numAnythingHere

Результат, который я хочу получить:

-num 3rdArgcEntered

Но я получил:

None

Это исходный код, над которым я сейчас работаю:

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

int main (int argc, char *argv[])
{
    if (!strcmp(argv[1], "-num")) 
    {
        printf("-num ");

        if(argc==3){
            printf("3rdArgcEntered");
        }
    }
    else
    {
        printf("None");
    }

    printf("\n");
    return 0;
}

person Lord Rixuel    schedule 30.03.2014    source источник
comment
Рассмотрите возможность использования getopt и getopt_long из GNU libc.   -  person Basile Starynkevitch    schedule 30.03.2014


Ответы (2)


немного мусора..

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

int main (int argc, char *argv[])
{
    /* doesnt check when args are not entered */
    char *tmp = argv[1];
    char buff[5];
    /* copy -num, doesnt check */
    memcpy(buff, tmp, 4);
    buff[4] = '\0';

    if (!strcmp(buff, "-num")) 
    {
        printf("-num ");

        /* larger than -num */
        if(argc==3 || strlen(tmp) > 4 ){
        printf("3rdArgcEntered");
        }
    }
    else
    {
         printf("None");
    }

    printf("\n");
    return 0;
}
person Community    schedule 30.03.2014

Ваша программа не может повлиять на то, как передаются аргументы; очевидно, что main уже был вызван в начале main. Вам нужно проанализировать каждый аргумент самостоятельно или использовать библиотеку, которая сделает это за вас. Для их самостоятельного разбора вы можете посмотреть на strtok или sscanf или перебрать символы. Но более специфическая библиотека, такая как getopt, как правило, предпочтительнее, так как она позволяет легко заставить вашу программу работать в соответствии с другими утилитами командной строки.

person Arkku    schedule 30.03.2014