命令行参数:在程序参数和参数的参数之间使用空格

时间:2010-07-05 08:53:06

标签: c arguments

在这里,我有一个程序,它接受参数(多么令人惊讶......)。我希望他有几个论点,如:

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

所以我想要带有“ - ”的主args,并且这些arg将接受另一个arg,在本例中是一个文件名。

我有这个结构,非常简单:

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 个答案:

答案 0 :(得分:4)

argv包含一个字符串数组。 Argv [0]包含程序名,argv [1]包含-f,argv [2]包含filename。如果您打印argv [1] [3],则从-f第三个​​字母开始打印字符串。没有这样的东西,所以行为是未定义的。

答案 1 :(得分:2)

尝试使用标准参数库,例如GNU getopt。

你的代码的问题是-f应该是打印argv [2] [0],而不是argv [1] [3]。它还需要检查argc是否> 2。