带参数的main函数用法小结
int main(int argc,char *argv[])
int main(int argc,char **argv)
以上两种函数定义等价。第二个形参argv是一个指向c风格字符串的指针数组,第一个形参argc则用于传递该字符数组中字符串的个数。
main()函数既可以是无参函数,也可以是有参的函数。对于有参的形式来说,就需要向其传递参数。但是其它任何函数均不能调用main()函数,当然也无法向main()函数传递,只能由程序之外传递而来。这个具体的问题怎样解决呢?
从函数参数的形式上看,包含一个整型和一个指针数组。
当一个C的源程序经过编译、链接后,会生成扩展名为.EXE的可执行文件,这是可以在操作系统下直接运行的文件,换句话说,就是由系统来启动运行的。对main()函数既然不能由其它函数调用和传递参数,就只能由系统在启动运行时传递参数了。
在操作系统环境下,一条完整的运行命令应包括两部分:命令与相应的参数。其格式为:
命令 参数1 参数2 .... 参数n
此格式也称为命令行。命令行中的命令就是可执行文件的文件名,其后所跟参数需用空格分隔,并为对命令的进一步补充,也即是传递给main()函数的参数。
当通过命令行将实参传递给main函数时,argv中的第一个字符串通常是程序的名字,后面的元素将额外的可选字符串传递给主函数main。
命令行与main()函数的参数存在如下的关系:
设命令行为:program str1 str2 str3 str4 str5
其中program为文件名,也就是一个由program.c经编译、链接后生成的可执行文件program.exe,其后各跟5个参数。对main()函数来说,它的参数argc记录了命令行中命令与参数的个数,共6个,指针数组的大小由参数argc的值决定,注意:argc的值是在输入命令行时由系统按实际参数的个数自动赋予的。
注意:接收到的指针数组的各指针是从命令行的开始接收的,首先接收到的是命令,其后才是参数。
例如下面的命令行
main hello world camel
系统将默认main为程序名字,即是命令。
argv[0]存放了字符串"main"的首地址。
argv[1]存放了字符串"hello"的首地址
....argv[3]存放了字符串"camel"的首地址。
此处argc的值是4;
程序实例:
#include "stdio.h"
#include "stdlib.h"
void main(int argc,char *argv[])
{
while(argc>1)
{
printf("%s\n",*++argv);
argc--;
}
system("pause");
}
在命令行下输入的输入输出如下所示:
C:\>"d:\study\main function\Debug\main.exe" hello
world camel chinese!
hello
world
camel
chinese!
请按任意键继续. . .
例如:
你编译连接后得到可执行文件名为main.exe
它的源文件如下:
#include "stdafx.h"
int main(int argc, char* argv[])
{
for (int i=0;i
printf("%s\n",argv[i]);
return 0;
}
运行的时候可以这样:
在开始->运行中输入cmd,启动命令行,进入到main.exe所在的目录,这时用dir命令可以看到这个文件.如果看不到,则说明当前目录还不是可执行文件所在的目录,需要更改,用命令cd进行切换.或者设置一下环境变量.
然后,输入,main.exe this is a test for main.
如果成功的话,就会输出.
main
this
is
a
test
for
main