Аргументы командной строки: использование пробела между аргументом программы и аргументом аргумента - PullRequest
2 голосов
/ 05 июля 2010

Здесь у меня есть программа, которая принимает аргументы (как удивительно ...).Я хочу, чтобы у него было несколько аргументов:

./myprogram -f filename.txt -x -o

, поэтому я хочу, чтобы основные аргументы были с "-", и эти аргументы должны принимать другой аргумент, например, имя файла.

У меня есть очень простая структура:

int main(int argc, char *argv[])
{
    printf("Program name: %s\n", argv[0]);

    while ((argc > 1) && (argv[1][0] == '-'))
    {
        switch (argv[1][1])
        {
            case 'f':
                printf("%s\n",&argv[1][3]);
                break;

            case 'd':
                printf("%s\n",&argv[1][2]);
                printf("%s\n",&argv[1][2]);
                break;

            default:
                printf("Wrong Argument: %s\n", argv[1]);
                usage();
        }

        ++argv;
        --argc;
    }


    return 0;
}

Как вы можете видеть, в случае -d это печатает то, что следует за аргументом, без пробела;Вот пример вывода:

./myprogram -dfilename
Program name: myprogram
filename
filename

и с параметром -f

./myprogram -f filename
Program name: myprogram
ffilename

он печатает дважды первую букву, и я не понимаю, почему.Может ли кто-нибудь помочь?

Ответы [ 2 ]

4 голосов
/ 05 июля 2010

argv содержит массив строк.Argv [0] содержит имя программы, argv [1] содержит -f в вашем случае, argv [2] содержит filename.Если вы печатаете argv [1] [3], вы печатаете строку, начинающуюся с третьей буквы из -f.Такой вещи нет, поэтому поведение не определено.

2 голосов
/ 05 июля 2010

Попробуйте использовать стандартную библиотеку аргументов, такую ​​как GNU getopt.

Проблема с вашим кодом в том, что -f должен печатать argv [2] [0], а не argv [1] [3]. Также необходимо проверить, что argc> 2.

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