getopt疑义
getopt疑问
代码为c语言!!
测试:
./hello -l
-l 是字母,不是数字1.
结果程序提示:
./hello: option requires an argument -- 'l'
我很奇怪,为什么 我分别用
./hello -g
./hello -n
都ok,
可偏偏./hello -l就出错。
好奇怪啊。
难道出错原因与: while ((oc = getopt(argc, argv, "ngl:")) != -1) 中的ngl的顺序有关系?
------解决思路----------------------
l后有冒号
冒号-l后面必须跟一个参数,否则报错。
和顺序无关。
http://www.cnblogs.com/pengyingh/articles/2503440.html
http://blog.****.net/mr_jj_lian/article/details/6835137
------解决思路----------------------
optstring是选项字母组成的字串。如果该字串里的任一字符后面有冒号,那么这个选项就要求有选项参数
所以 ./hello -l forever
------解决思路----------------------
l:
表示l后面有参数,但是你并没有提供参数。
case 'l':
b_opt_arg = optarg;
printf("Our love is %s\n", optarg);
break;
看到optarg没有?
extern char *optarg;
extern int optind, opterr, optopt;
int main(int argc, char **argv)
{
int oc; /*选项字符 */
char *b_opt_arg; /*选项参数字串 */
while ((oc = getopt(argc, argv, "ngl:")) != -1)
{
switch (oc)
{
case 'n':
printf("My name is Lyong.\n");
break;
case 'g':
printf("Her name is Xxiong.\n");
break;
case 'l':
b_opt_arg = optarg;
printf("Our love is %s\n", optarg);
break;
}
}
return 0;
}
代码为c语言!!
测试:
./hello -l
-l 是字母,不是数字1.
结果程序提示:
./hello: option requires an argument -- 'l'
我很奇怪,为什么 我分别用
./hello -g
./hello -n
都ok,
可偏偏./hello -l就出错。
好奇怪啊。
难道出错原因与: while ((oc = getopt(argc, argv, "ngl:")) != -1) 中的ngl的顺序有关系?
------解决思路----------------------
l后有冒号
冒号-l后面必须跟一个参数,否则报错。
和顺序无关。
http://www.cnblogs.com/pengyingh/articles/2503440.html
http://blog.****.net/mr_jj_lian/article/details/6835137
------解决思路----------------------
optstring是选项字母组成的字串。如果该字串里的任一字符后面有冒号,那么这个选项就要求有选项参数
所以 ./hello -l forever
------解决思路----------------------
l:
表示l后面有参数,但是你并没有提供参数。
case 'l':
b_opt_arg = optarg;
printf("Our love is %s\n", optarg);
break;
看到optarg没有?