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

Posted

技术标签:

【中文标题】int main(int argc,char** argv)[重复]【英文标题】:int main(int argc, char** argv) [duplicate] 【发布时间】:2011-07-08 16:43:49 【问题描述】:

重复:What is the proper declaration of main?

main 函数中的参数是什么意思?他们想告诉我们什么?

int main(int argc, char** argv)

更新: 而且,前面的代码行与int main(int argc, char* argv[]) 相似吗?如果是这样,我们怎么能说char** argvchar* argv[] 相似,因为从数组 的角度来看它们看起来并不相似?

与没有参数的int main()相比如何?

谢谢。

【问题讨论】:

【参考方案1】:

Wikipedia 提供了很好的解释。第一个参数为您提供命令行参数的数量,第二个参数为您提供实际参数。

【讨论】:

【参考方案2】:

argc 为您提供参数的数量,而 argv 为您提供这些参数。第一个是用于运行程序的 .exe 的路径,以下是 .exe 的调用者在命令行上提供的参数,如下所示:

my.exe arg1 arg2

int main() 

只是忽略参数。

【讨论】:

【参考方案3】:

argc 参数是在调用可执行文件时指定的命令行选项的数量,包括可执行文件的名称。各个命令行选项位于argv 数组中,该数组以NULL 终止(用于调用可执行文件的名称和路径在argv[0] 中)。

这两个版本的区别只是你是否想解析命令行参数 - 如果你对它们不感兴趣,那么你可以使用第二种形式忽略它们。

【讨论】:

【参考方案4】:

argv 是一个包含传递给应用程序的命令行参数的数组。 argc 告诉您该数组中包含的元素数量。

【讨论】:

【参考方案5】:

它们代表命令行参数。

argc 是命令行参数的数量,包括可执行文件的名称。 argv 是一个以 null 结尾的字符串数组,其中argv[0] 是命令行参数,argv[i] 是之后的第 i 个参数,argv[argc-1] 是最后一个,argv[argc] 实际上定义良好,并且是一个 NULL 指针.

因此:

foo bar baz

在命令行上会有argc=3, argv[0]="foo" argv[1]="bar" argv[2]="baz" argv[3] = NULL

请注意,没有为“标志”参数放置特殊附件。

grep -i foo bar.cpp bar.h

将有 4 个参数(argc=5 包括 grep 本身),-i 是其中之一,即使下一个参数是附加到标志的“值”,这也适用。

注意你是否使用了通配符

grep -i foo *

至少在 UNIX 中,* 会在调用 grep 之前扩展,因此每个匹配的文件都是一个参数。

顺便说一句

char** argvchar* argv[]

做同样的事情。

此外,虽然标准规定您必须使用其中一个签名(您甚至不应该添加任何 const),但没有法律规定您必须使用这两个变量名,但现在它是如此传统,以至于它们几乎普遍的。 (即,如果需要,您可以使用 argCountargValues)。

【讨论】:

我认为你的意思是 argc =3 不是 argc =2

以上是关于int main(int argc,char** argv)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

main (int argc,char *argv[]) 或main (int argc,char **argv)区别

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

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

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

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

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