命令行参数 : use of space between program argument, 和参数的参数

标签 c arguments

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

./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

它打印了第一个字母两次,我不明白为什么。 有人可以帮忙吗?

最佳答案

argv 包含一个字符串数组。 argv[0] 包含程序名称,argv[1] 包含 -f (在您的情况下),argv[2] 包含 文件名。如果打印 argv[1][3],则打印从 -f第三个​​字母开始的字符串。不存在这样的事情,因此行为未定义。

关于命令行参数 : use of space between program argument, 和参数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3178181/

相关文章:

C编程-递归填充数组

c - 如何从标准输入读取-1 字符?

带参数的 JavaFX JavaScript 上行调用

python - Python 如何以不同方式接收标准输入和参数?

javascript - 将函数参数映射到变量(如果存在)

c - 从 socket 到管道的接头卡住

c++ - C 预处理器作为语言创建工具的长度/限制是什么?我在哪里可以了解更多关于这些的信息?

c - 如何使用位操作将 char 数组 [example 42] 转换为 int equivilant [int 42]?

c++ - 子类作为参数?

python - 将参数分配给具有相同名称的全局变量