main(int argc, char *argv[])就是为了让程序里面能使用参数,argc是argument count的缩写,表示参数的个数,argv是argument value的缩写,表示参数的值。
在以前的例子中,main函数的形式参数列表都是空的。实际上,main函数也可以带参数。带参数main函数的定义格式如下:void main(int argc, char *argv[]){... ...}argc和argv是main函数的形式参数。这两个形式参数的类型是系统规定的。如果main函数要带参数,就是这两个类型的参数;否则main函数就没有参数。变量名称argc和argv是常规的名称,当然也可以换成其他名称。那么,实际参数是如何传递给main函数的argc和argv的呢?我们知道,C程序在编译和链接后,都生成一个exe文件,执行该exe文件时,可以直接执行;也可以在命令行下带参数执行,命令行执行的形式为:可执行文件名称 参数1 参数2 ... ... 参数n可执行文件名称和参数、参数之间均使用空格隔开。例如,我们在DOS下运行copy c:\test.txt d:\test.txt,可执行文件名称为copy,参数1为字符串“c:\test.txt”,参数2为“d:\test.txt”。结果copy命令将c:\test.txt拷贝到d盘,目标文件取为test.txt。如果按照这种方法执行,命令行字符串将作为实际参数传递给main函数。具体为:(1) 可执行文件名称和所有参数的个数之和传递给argc;(2) 可执行文件名称(包括路径名称)作为一个字符串,首地址被赋给argv[0],参数1也作为一个字符串,首地址被赋给argv[1],... ...依次类推。例如,现在运行命令行(test是编译后的exe文件名称):C:\TC\test how are you那么test工程的main函数参数argc=4;argv[0]将保存字符串"C:\TC\test"的首地址;argv[1]将保存字符串"how"的首地址;argv[2]将保存字符串"are"的首地址;argv[3]将保存字符串"you"的首地址;下面的例子打印所有的argv参数:main(int argc, char *argv[]){int i;printf("\nTotal %d arguments",argc);for(i=0;i<argc;i++){printf("\nArgument %d = %s ",i+1, argv[i]);}}如果编译后的exe文件名称为test,在DOS下运行C:\TC\test how are you,结果输出:Total 4 argumentsArgument 1 = C:\TC\test.exeArgument 2 = howArgument 3 = areArgument 4 = you我们也可以在调试状态下输入命令行参数,方法是:在TurboC的Options菜单下有一个子菜单Arguments,选择该项并确定,弹出输入窗口;在输入窗口键入命令行参数即可。比如要调试上述的test,可以在输入窗口键入how are you。在调试过程中,可执行文件名称和参数字符串将被传递给main函数的形式参数。在DOS系统下,人们常常希望在运行exe的同时,传递一些有用的信息。例如copy.exe,运行时将源文件名称和目的文件名称作为参数传入。利用指针数组argv作为main函数的形式参数,可以满足这种需要。
posted on 2012-03-28 17:08
愤怒的考拉 阅读(142)
评论(0) 编辑 收藏