我知道argc
会计算自变量的数量,而argv
会接受自变量,但这是我可以确定是否从argv
来的自变量以某种格式输入的一种方式就像用括号而不是括号一样。例如./a.out "Hello Word"
和./a.out Hello World
?
答案 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可能会提供执行此操作的工具,但是并不能保证这样做,即使这样做,也没有标准的方法。