linux中有个函数可以用来解析传递给main函数的参数,就是getopt函数,用这个函数就可以不需要自己再写一个参数解析函数了...很省事。
所需参数argc,argv就是main函数中传入的参数,关于optstring参数是这样的,我用下面一个例子来说明吧:int getopt(int argc, char * const argv[], const char *optstring);
可以看到,在optstring参数的位置是一个字符串,但是为什么字符串里会有“a:b:”这么奇怪的字符呢?再往下看,switch(opt)中有1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <unistd.h> 4 5 main(int argc, char ** argv) 6 { 7 int opt; 8 9 while ((opt = getopt(argc, argv, "a:b:")) != -1) 10 { 11 switch (opt) 12 { 13 case 'a': printf("a\t%x\n", optarg); 14 break; 15 case 'b': printf("b\t%x\n", optarg); 16 break; 17 } 18 } 19 printf("%x\t%x\n", argv[2], argv[4]); 20 }
否返回了对应的ASCII码呢?那个optarg又是什么?
结果中出现了 invalid option -- 'c'这样的提示,下面的两个数字先不用管。提示说无效的选项。再看个例子:[yangfan@My--Zone test]$ ./a.out -c ./a.out: invalid option -- 'c' 0 bfaa713a
说是这个操作需要一个argument。先别急,再来个:[yangfan@My--Zone test]$ ./a.out -a ./a.out: option requires an argument -- 'a' 0 bfa8113a
[yangfan@My--Zone test]$ ./a.out -a ppp a bf84212b bf84212b bf84212f
诶~~这次没有出错的提示信息了...
这样的引用,而getopt.h有包含在unistd.h中, 在你的程序里面直接对其进行调用即可。下面对argv[2]和argv[4]地址的打印就是
为了验证optarg的数值是否存的是argv中的地址,结果是肯定的。结果就是这样....还有一些高端的用法,等用到了在做总结。
本文来自:http://blog.163.com/yangfan876@126/blog/static/8061245620134217536708/