命令行参数的最大作用就是让我们可以在程序之外控制程序,例如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 <stdio.h>
#include <stdlib.h>
/* 实现类似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!
分析:只需要弄清楚指针数组的内部结构,画了张图,见下面。
本文链接:http://blog.csdn.net/daheiantian/archive/2011/02/13/6246519.aspx