分类: C/C++
2008-09-15 16:46:30
指向指针的指针可以用来处理命令行参数。有些操作系统,包括linux和ms-dos让用户在命令行中编写参
数来启动一个程序的执行。这些参数传递给程序,程序按照一定的方式对他们进行处理。 c程序的main函数有两个行参,第一个通常叫做argc,他表示命令行参数的多少。第二个通常叫做argv,
他指向一组参数。由于参数的数目并没有限制,所以argv指向这组参数(本质是一个数组)的第一个元素。如
果程序需要访问命令行参数,main函数在声明时就要加上这些参数: int main(int argc,char *argv[])这里的参数名可以任意取。 下图显示了这条命令行是如何传递的: $ echo -n hello linux argc = 4 argv[0]
'e' |
'c' |
'h' |
'o' |
|
argv[1]
'-' |
'n' |
0 |
argv[2]
'h' |
'e' |
'l' |
'l' |
'o' |
0 |
argv[3]
'l' |
'i' |
'n' |
'u' |
'x' |
0 |
注意指针数组:这个数组每个元素都是一个字符指针,数组的末尾是一个NULL指针。Argv指向数组的
第一个元素,第一个参数就是程序名。在有些系统中,参数字符串是挨个存储。这样当你把指向第一个参数的
指针向后移动,越过第一个参数尾部时,就达到第二个参数的开始。这种排列方式是由编译器决定的,所以我
们不能依赖他。为了寻找一个参数的起始位置,我们应该使用数组中合适的指针。 下面是一个简单的例子,用来打印出所有的参数(程序名除外) /*打印命令行参数的程序*/ #include#include int main(int argc,char *argv[]) { while(*++argv != NULL) /*打印参数,直到遇到NULL*/ printf(“%s\n”,*argv); return 0; } while循环增加argc的值,然后检查*argv ,看是否达到参数列表的尾部,方法是把每个参数都与表示列
表末尾的NULL比较。如果还存在另外的参数,循环体就执行,打印出这个参数。再循环一开始就增加argc
的值,程序名自然就被跳过。printf函数的格式字符串中的%s格式码要求参数是一个指向字符的指针。