命令行参数argv和argc

时间:2019-09-23 20:20:32

标签: c arguments argv argc

我知道argc会计算自变量的数量,而argv会接受自变量,但这是我可以确定是否从argv来的自变量以某种格式输入的一种方式就像用括号而不是括号一样。例如./a.out "Hello Word"./a.out Hello World

1 个答案:

答案 0 :(得分:1)

是,不是。基本上,唯一的方法就是使用strcmp之类的函数进行字符串比较。但是,使事情复杂化的一件事是,您使用的shell可能会在程序有机会看到引号之前将其删除。更糟的是,如何处理取决于外壳程序,因此对一个外壳程序有效的操作对于另一个外壳程序可能失败。 Posix shell(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可能会提供执行此操作的工具,但是并不能保证这样做,即使这样做,也没有标准的方法。