int argc,char * argv []是什么意思?

在许多C ++ IDE和编译器中,当它为您生成主要功能时,它看起来像这样:

int main(int argc, char *argv[])

当我编写没有IDE的C ++时,只需使用命令行编译器,我键入:

int main()

没有任何参数。 这是什么意思,对我的程序至关重要?


argvargc是命令行参数如何在C和C ++中传递给main()

argc将是argv指向的字符串的数量。 这将(实际上)为1加上参数的数量,因为实际上所有的实现都会在程序中加入数组名称。

按照约定,这些变量被命名为argc (参数计数)和argv (参数向量),但它们可以被赋予任何有效的标识符: int main(int num_args, char** arg_strings)同样有效。

如果你不打算处理命令行参数,它们也可以完全省略,产生int main()

尝试下列程序:

#include <iostream>

int main(int argc, char** argv) {
    std::cout << "Have " << argc << " arguments:" << std::endl;
    for (int i = 0; i < argc; ++i) {
        std::cout << argv[i] << std::endl;
    }
}

运行./test a1 b2 c3将会输出

Have 4 arguments:
./test
a1
b2
c3

argc是从命令行传入程序的参数个数, argv是参数数组。

您可以通过知道它们的数量来循环参数:

for(int i = 0; i < argc; i++)
{
    // argv[i] is the argument at index i
}

假设你运行你的程序(使用sh语法):

myprog arg1 arg2 'arg 3'

如果你将main声明为int main(int argc, char *argv[]) ,那么(在大多数环境中),你的main()将被调用,就像是:

p = { "myprog", "arg1", "arg2", "arg 3", NULL };
exit(main(4, p));

但是,如果你将main声明为int main() ,它将被称为类似

exit(main());

而你没有得到通过的参数。

还有两点需要注意:

  • 这些是main的唯一两个标准授权签名。 如果一个特定的平台接受额外的参数或不同的返回类型,那么这是一个扩展,不应该依赖于便携式程序。
  • *argv[]**argv完全等价,因此可以将int main(int argc, char *argv[])写成int main(int argc, char **argv)
  • 链接地址: http://www.djcxy.com/p/12509.html

    上一篇: What does int argc, char *argv[] mean?

    下一篇: Unary plus (+) against literal string