这个main
函数中的参数是什么意思?他们试图告诉我们什么?
int main(int argc, char** argv)
更新:并且,上一行代码是否类似于此int main(int argc, char* argv[])
?如果是这样,我们怎么能说char** argv
与char* argv[]
类似,因为从数组的角度来看它们看起来并不相似?
如何与没有任何参数的int main()
进行比较?
感谢。
答案 0 :(得分:11)
argc
参数是调用可执行文件时指定的命令行选项数,包括可执行文件名。单个命令行选项位于argv
数组中,NULL
终止(用于调用可执行文件的名称和路径位于argv[0]
)。
两个版本之间的区别仅在于您是否要解析命令行参数 - 如果您对它们不感兴趣,那么您可以使用第二种形式忽略它们。
答案 1 :(得分:4)
Wikipedia提供了一个很好的解释。第一个参数为您提供命令行参数的数量,第二个参数为您提供实际参数。
答案 2 :(得分:3)
它们代表命令行参数。
argc是命令行参数的数量,包括可执行文件的名称。
argv是一个以空字符结尾的字符串数组,其中argv[0]
是命令行参数,argv[i]
之后是argv[argc-1]
,argv[argc]
是最后一个,foo bar baz
实际上是很好的定义和一个NULL指针。
因此:
argc
将argv[0]
= 3,argv[1]
=“foo”argv[2]
=“bar”argv[3]
=“baz”grep -i foo bar.cpp bar.h
= NULL
请注意,“flag”参数没有特殊的附件。
grep -i foo *
将有4个参数(argc = 5包括grep本身),-i是其中之一,即使下一个参数是附加到标志的“值”,这也适用。
请注意,如果您使用了通配符
char** argv
顺便提及
char* argv[]
和argCount
做同样的事情。
虽然标准说你必须使用这些签名中的一个(你甚至不应该添加任何consts),但是没有法律你必须使用这两个变量名,但它现在是如此常规,以至于它们几乎都是普遍。 (如果您愿意,可以使用argValues
和{{1}}。)
答案 3 :(得分:2)
argc为您提供参数的数量,argv为您提供这些参数。第一个是用于运行程序的.exe的路径,以下是您在命令行上提供的.exe调用者的参数,如下所示:
my.exe arg1 arg2
尽管
int main() {}
忽略这些论点。
答案 4 :(得分:2)
argv是一个包含传递给应用程序的命令行参数的数组。 argc告诉你该数组中包含的元素数量。