您的位置:首页 > 大数据 > 人工智能

关于带参数的main函数

2010-10-02 22:30 183 查看
main()函数既可以是无参函数,也可以是有参的函数。对于有参的形式来说,就需要向其传递参数。但是其它任何函数均不能调用main()函数,当然也无法向main()函数传递,只能由程序之外传递而来。这个具体的问题怎样解决呢?

我们先看一下main()函数的带参的形式:
main(argc,argv)
int
argc,char
*argv[];
{
.....
}

从函数参数的形式上看,包含一个整型和一个指针数组。agrc为参数的个数,argv[0]为自身运行程序名,argv[1]指向第一个参数、argv[2]指向第二个参数、等等。
对main()函数,既然不能由其它函数调用和传递参数,就只能由系统在启动运行时传递参数了。在操作系统环境下,一条完整的运行命令应包括两部分:命令与相应的参数。其格式为:
命令参数1参数2....参数n
此格式也称为命令行。命令行中的命令就是可执行文件的文件名,其后所跟参数需用空格分隔,并为对命令的进一步补充,也即是传递给main()函数的参数。

命令行与main()函数的参数存在如下的关系:
设命令行为:program
str1 str2 str3 str4
str5
其中program为文件名,也就是一个由program.c经编译、链接后生成的可执行文件program.exe,其后各跟5个参数。对main()
函数来说,它的参数argc记录了命令行中命令与参数的个数,共6个,指针数组的大小由参数argc的值决定,即为char*argv[6]。

数组的各指针分别指向一个字符串。应当引起注意的是接收到的指针数组的各指针是从命令行的开始接收的,首先接收到的是命令,其后才是参数。
main()函数还有第三个参数env,env:
安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符
串。其中ENVVAR为环境变量如PATH或87。value
为ENVVAR的对应值如C:/DOS, C:
/TURBOC(对于PATH) 或YES(对于87)。
所以常见的形式是这样的:

main()
main(int argc)
main(int argc, char *argv[])

main(int argc, char *argv[], char *env[])

其中第二种情况是合法的,但一般没有这么用的。
以下提供一样例程序EXAMPLE.EXE, 演示如何在main()函数中使用三个参数:

/*program name EXAMPLE.EXE*/
#include <stdio.h>

#include <stdlib.h>
main(int argc, char *argv[], char *env[])

{
int i;
printf("These are the %d command-
line arguments passed to
main:/n/n", argc);

for(i=0; i<=argc; i++)
printf("argv[%d]:%s/n", i, argv[i]);

printf("/nThe environment string(s)on this system are:/n/n");

for(i=0; env[i]!=NULL; i++)
printf("
env[%d]:%s/n", i, env[i]);
}
如果在DOS 提示符下, 按以下方式运行EXAMPLE.EXE:

C:/example first_argument "argument with blanks" 3 4 "last but
one"
stop!
注意: 可以用双引号括起内含空格的参数, 如本例中的: " argument
with blanks"和"Last
but one")。
结果是这样的:
The value of argc is 7
These are
the 7 command-linearguments passed to main:

argv[0]:C:/TURBO/EXAMPLE.EXE
argv[1]:first_argument

argv[2]:argument with blanks
argv[3]:3
argv[4]:4

argv[5]:last but one
argv[6]:stop!
argv[7]:(NULL)
The
environment string(s) on this system are:
env[0]:
COMSPEC=C:/COMMAND.COM
env[1]: PROMPT=$P$G /*视具体设置而定*/

env[2]: PATH=C:/DOS;C:/TC /*视具体设置而定*/

应该提醒的是:
传送main() 函数的命令行参数的最大长度为128 个字符 (包
括参数间的空格), 这是由DOS 限制的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: