C语言的命令行参数

         命令行参数的最大作用就是让我们可以在程序之外控制程序,例如linux或者dos中我们经常使用的命令,从本质上将是一个程序;而我们使用的参数,就是该命令(对应的程序)的命令行参数。

         正是由于命令行的这么重要的作用,所以它成为各种编程语言不可缺少的功能,只是实现细节上略有不同,但大体上都是一样的,而且都比较简单。

1. 先想一想

1.1 程序中在哪里接收命令行参数(where)

         命令行参数,顾名思义,就是在命令行调用程序时传递的参数,那么谁来接收呢,一定是main函数了,因为程序是从main函数开始执行的啊。那作为一个函数,main怎么接收参数呢,很明显,用参数接收是最简单的方式。

1.2 程序中怎样接收去接收参数(how)

        想一下现在linux或者dos命令中使用参数的形式,你是否能想到一个比现在的方式更简单的方式:【命令 选项 参数】。我是想不出来了,那么针对这种方式,如何来接收呢。其实也很简单,因为它们使用空格分开的,所以我们只要将它们作为字符串依次存在一个数组就行了,也就是使用一个指针数组,每个元素是一个字符指针。对于数组我们经常使用的一个特性就是数组的长度,为了防止每次都自己编写代码求长度(实际上是重复劳动,因为求一个指针数组的长度代码是固定的),所以显式的提供给我们这个长度是比较好的。

2. 如何使用

        将main函数的声明为如下形式:

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

/* 这里省略了函数体内容 */

}

      注意事项:

        1. argv是一个指针数组,要明白它的存数格式。它的每个元素都是一个字符指针,数组的末尾是一个NULL指针

        2. 也是由于argv是一个指针数组,它指向数组的第一个元素(是一个字符指针),所以argv是一个指向字符指针的指针,所以可以将其声明为char **argv。即声明为:【 int main( int argc, char **argv ) 】

        3. 参数名称是不重要的,你可以声明为其它的名字,比如 【 int main( int a, char *b[] ) 】 都是可以的。

        4. 指针数组argv的第 1 个元素,即argv[0],是程序名,也就是你的可执行文件的名字。

        5. 如果你输入的参数中有空格,应该使用双引号括起来。

3.使用举例

        实现一个类似echo命令的程序:将所有参数打印出来。文件名为:my_echo.c

#include  
#include  

/* 实现类似echo的输出一行 */ 

#define BUFFER_SIZE 100

void function( FILE *input );

int main( int argc, char *argv[]){
    printf("argc == %d  /n", argc); 
    
    char ** temp = argv;  /* 保留argv */
    while( *++temp != NULL ){
        printf("%s ", *temp);
    } 
    printf("/n");
    
    system("pause");
    return EXIT_SUCCESS;
}

执行结果:(默认得到的可执行文件为my_echo.ext,在执行函数时,传递参数为hello world, hello C!)。如果在命令行中打开,使用my_echo.exe hello world, hello C!

argc == 5
hello world, hello C!

分析:只需要弄清楚指针数组的内部结构,画了张图,见下面。

C语言的命令行参数_第1张图片

本文链接:http://blog.csdn.net/daheiantian/archive/2011/02/13/6246519.aspx

你可能感兴趣的:(C)