命令行参数 argv 和 argc

command line arguments argv and argc

我知道 argc 计算参数的数量,而 argv 接受参数,但这是我可以确定我的 argv 的参数是否输入的方法某些格式如括号中而不是括号中。比如./a.out "Hello Word"./a.out Hello World?

是也不是。基本上唯一的方法是用像 strcmp 这样的函数进行字符串比较。但是,使事情复杂化的一件事是您使用的 shell 可能会在您的程序有机会看到它们之前删除引号。更糟糕的是,如何处理取决于 shell,因此对一个 shell 有效的方法可能对另一个无效。 Posix shells(sh、bash、ksh 等等)以相同的方式处理引号,但不提供任何检测方式。

这个节目:

#include <stdio.h>

int main(int argc, char **argv)
{
    printf("Number of arguments: %d\n", argc);
    for(int i=0; i<argc; i++)
        printf("Argument %d: %s\n", i, argv[i]);
}
当使用 shell bash:

时,

产生星号作为参数的输出

/tmp/test$ ./a.out *
Number of arguments: 3
Argument 0: ./a.out
Argument 1: a.out
Argument 2: main.c

这是因为 * 由 shell 扩展到当前目录中的所有文件。引号通常将原本会被视为两个不同论点的事物组合在一起。如果您想将引号传递给 bash,您可以转义它们。

/tmp/test$ ./a.out "Hello world"
Number of arguments: 2
Argument 0: ./a.out
Argument 1: Hello world

/tmp/test$ ./a.out \"Hello world\"
Number of arguments: 3
Argument 0: ./a.out
Argument 1: "Hello
Argument 2: world"

很遗憾,答案是否定的。没有通用的方法可以做到这一点。某些 shell 可能会提供执行此操作的工具,但并不能保证,即使他们提供了,也没有标准的方法来执行此操作。