首先,先了解下什么叫做命令行选项呢?命令行选项是在dos环境(如果是windows操作系统,那么在“开始”菜单下找到“运行”,然后键入“cmd”,即可进入dos环境)下执行的命令,它是有空格分隔的命令。例如:
prog -d -o ofile data0
prog:是可执行文件的文件名,如prog.exe是可执行文件,它的文件名是prog。至于后面的参数是什么意思后面的介绍将会讲到。
main()函数的一种扩展原型为:
main( int argc, char *argv[] )
{...}
命令行选项是main()的实参。在main()函数中,我们可以通过一个名为argv的C风格字符串数组访问它。argc包含命令行选项的个数,argv包含argc个C风格字符串,代表了由空格分隔的命令选项。例如对于上面刚才的举的命令行选项,argc和argv的值分别如下:
argc = 5
argv的值被设置成如下的C风格字符串:
argv[0] = "prog" ;
argv[1] = "-d" ;
argv[2] = "-o" ;
argv[3] = "ofile" ;
argv[4] = "data0" ;
argv[0] 总是被设置为当前正被调用的命令。比如本例是prog.exe命令正在被调用,所以argv[0]的值是prog。从索引1到argc-1表示被传递给命令的实际选项。
命令行选项的格式如下:
program_name [-d] [-h] [-v] [-o output_file] [-l limit_value] file_name [file_name [file_name [ ... ]]]
方括号的内容是可选的。例如,最小的命令行只要给出要处理的文件:
prog chap1.doc
-d:表示准备调试
-h:表示打开帮助文档
-v:表示显示版本信息
-o:表示处理输出文件
-l:准备处理限制量
main函数的参数如何获得实参的值呢?
由于main函数不能被其它函数调用, 因此不可能在程序内部取得实际值。那么,在何处把实参值赋予main函数的形参呢? 实际上,main函数的参数值是从操作系统命令行上获得的。当我们要运行一个可执行文件时,在DOS提示符下键入文件名,再输入实际参数即可把这些实参传 送到main的形参中去。
下面举一个具体的例子:
#include <iostream>
using namespace std;
int main(int argc,char *argv[])
{
cout << "argc= " << argc << endl;
for(int i=0;i<argc;i++)
{
cout << "argv[" << i << "] = " << argv[i] <<endl;
}
return 0;
}
首先,我们先编译且运行该文件,得到如下的结果:
从上面我们可以知道:
argc = 1
argv[0]为可执行命令的路径。
然后我们根据可执行文件的路径进入到该文件下,即进入dos环境下:
可以看到这时argc 和argv的值了。