Menu Close

main 函数的参数 – C语言

前面介绍的 main 函数都是不带参数的。因此 main 后的括号都是空括号。实际上,main函数可以带参数,这个参数可以认为是 main 函数的形式参数。C语言规定 main 函数的参数只能有两个,习惯上这两个参数写为 argc 和 argv。因此,main 函数的函数头可写为:

main (argc,argv)

C语言还规定 argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针数组。加上形参说明后,main 函数的函数头应写为:

main (int argc,char *argv[])

由于 main 函数不能被其它函数调用,因此不可能在程序内部取得实际值。那么,在何处把实参值赋予 main 函数的形参呢?

实际上,main 函数的参数值是从操作系统命令行上获得的。当我们要运行一个可执行文件时,在 DOS 提示符下键入文件名,再输入实际参数即可,把这些实参传送到 main 的形参中去。

DOS 提示符下命令行的一般形式为:

C:\>可执行文件名 参数 参数……;

但是应该特别注意的是,main 的两个形参和命令行中的参数在位置上不是一一对应的。因为,main 的形参只有二个,而命令行中的参数个数原则上未加限制。

argc 参数表示了命令行中参数的个数(注意:文件名E24本身也算一个参数),argc 的值是在输入命令行时由系统按实际参数的个数自动赋予的。

例如有命令行为:

C:\>E24 BASIC foxpro FORTRAN

由于文件名 E24 本身也算一个参数,所以共有 4 个参数,因此 argc 取得的值为 4。argv 参数是字符串指针数组,其各元素值为命令行中各字符串(参数均按字符串处理)的首地址。 指针数组的长度即为参数个数。数组元素初值由系统自动赋予。

其表示如图所示:

例1.main函数的参数

#include "stdio.h"
int main(int argc, char *argv[])
{
    int count;
    printf("The command line has %d arguments:", argc - 1);
    for(count = 0; count < argc; count++)
         printf("\n%d: \t%s", count, argv[count]);
   return 0;
}

例2.main函数的参数

#include "stdio.h"
int main(int argc, char *argv[])
{
    int count;
    printf("The command line has %d arguments:", argc - 1);
        for(count = 1; count < argc; count++)
    printf("\n%d: \t%s", count, argv[count]);
   return 0;
}

这两个参数,一个是int类型,一个是字符串类型。第一个参数是命令行中的字符串数。按照惯例(但不是必须的),这个int参数被称为argc(argument count)。

第二个参数是一个指向字符串的指针数组。命令行中的每个字符串被存储到内存中,并且分配一个指针指向它。按照惯例,这个指针数组被称为argv(argument value)。

系统使用空格把各个字符串格开。一般情况下,把程序本身的名字赋值给argv[0],接着,把最后的第一个字符串赋给argv[1],等等。

从本例可以看出,程序从命令行中接受到4个字符串(包括程序名),并将它们存放在字符串数组中,其对应关系:

argv[0] ——> c(程序名)
argv[1] ——> I
argv[2] ——> love
argv[3] ——> you

这个例子中,每个字符串都时一个单词(字母),那既然是字符串,要把一句话当作参数赋给程序该怎么办?你可以在命令行里这样输入 c “I love you.” “m too.”。程序运行结果:

The command line has 2 arguments:

1:I love you.
2:I’m too.

其对应关系:

argv[0] ——> c(程序名)
argv[1] ——> I love you.
argv[2] ——> I’m too.

wer

除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Leave the field below empty!

Posted in C语言教程

Related Posts