C++ - int main(int argc,char*argv [])

Sim*_*ity 4 c++ arrays program-entry-point argv

如果我有这个:

int main(int argc, char *argv[])
Run Code Online (Sandbox Code Playgroud)

在身体中,您有时可以找到使用的程序argv[1].

我们什么时候argv[1]用完argv[0]?是否仅在我们想要在命令行中读取第二个参数时?

Meh*_*dad 12

按照惯例,argv[0]当前节目的名称(或路径),并argv[1]通过argv[argc - 1]都是命令行参数,用户提供.

然而,这并不必须是真实的-程序可以与操作系统相关的功能来绕过这一要求,而这种情况往往不够,你应该意识到这一点.(即使你知道它,我也不确定你能做多少事情......)

例:

gcc -O3 -o temp.o "My file.c"
Run Code Online (Sandbox Code Playgroud)

会(应该)产生以下参数:

argc: 5
argv: ["gcc", "-O3", "-o", "temp.o", "My file.c"]
Run Code Online (Sandbox Code Playgroud)

所以说argv[0]会参考gcc,-O3.

  • 5.1.2.2.1第2节第4点:"如果`argc`的值大于零,`argv [0]`指向的字符串表示程序名称;`argv [0] [0]`应为如果程序名不能从主机环境获得,则返回null字符.如果`argc`的值大于1,则由`argv [1]`指向`argv [argc-1]`指向的字符串代表程序参数". (6认同)
  • @Chris:当然也是UNIX/Linux:函数的所有exec函数允许执行进程为其子进程指定一个argv值 - 按照约定,这是孩子的可执行文件名,但是有一个众所周知的几十年的黑客来隐藏你正在运行,例如irc并且似乎正在运行说vim:只需要一个小程序执行前者,后者强制进入argv [0].这样一个简单的ps等会使它看起来像你正在工作. (3认同)
  • @Tony - 如果有人用'exec`欺骗程序认为它的名字是别的东西,那么我们应该期望程序认为它的名字是我们告诉它的名字,不是吗?因此,一个程序应该相信`argv [0]`是它的名字,如果我们对我们的孩子计划撒谎,我们应该为自己感到羞耻.;) (2认同)

Naw*_*waz 5

argv是一个指针数组,此数组中的每个指针都存储一个来自命令行的参数.那么argv[0]第一个参数(即可执行文件/程序本身),argv[1]是第二个参数,依此类推!

参数总数由argc.确定.