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** argv
与char* 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** argv
和 char* argv[]
做同样的事情。
此外,虽然标准规定您必须使用其中一个签名(您甚至不应该添加任何 const),但没有法律规定您必须使用这两个变量名,但现在它是如此传统,以至于它们几乎普遍的。 (即,如果需要,您可以使用 argCount
和 argValues
)。
【讨论】:
我认为你的意思是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[]) 解析