gpt4 book ai didi

命令行参数 argv 和 argc

转载 作者:行者123 更新时间:2023-11-30 14:36:27 27 4
gpt4 key购买 nike

我知道 argc 计算参数的数量,argv 接受参数,但它们是我可以确定我的参数是否来自 argv 以某种格式输入,如括号内和非括号内。比如./a.out "Hello Word"./a.out Hello World

最佳答案

是和否。基本上,执行此操作的唯一方法是使用 strcmp 等函数进行字符串比较。然而,使问题变得复杂的一件事是,您所使用的 shell 可能会在您的程序有机会看到引号之前删除它们。更糟糕的是,处理方式取决于 shell,因此对一种 shell 有效的方法可能对另一种 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 可能会提供工具来执行此操作,但不能保证这一点,即使它们提供了,也没有标准的方法来执行此操作。

关于命令行参数 argv 和 argc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58069674/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com