大家好,又见面了,我是你们的朋友全栈君。
getopt() 方法是用来分析命令行参数的,该方法由 Unix 标准库提供,包含在 <unistd.h> 头文件中。
int getopt(int argc, char * const argv[], const char *optstring);
extern char *optarg;
extern int optind, opterr, optopt;
getopt 参数说明:
外部变量说明:
?
字符,optopt 中包含的就是发现的无效选项字符让我们通过一系列的实例来掌握 getopt 方法的使用吧。
OptDemo.c 如下:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
int o;
const char *optstring = "abc:"; // 有三个选项-abc,其中c选项后有冒号,所以后面必须有参数
while ((o = getopt(argc, argv, optstring)) != -1) {
switch (o) {
case 'a':
printf("opt is a, oprarg is: %s\n", optarg);
break;
case 'b':
printf("opt is b, oprarg is: %s\n", optarg);
break;
case 'c':
printf("opt is c, oprarg is: %s\n", optarg);
break;
case '?':
printf("error optopt: %c\n", optopt);
printf("error opterr: %d\n", opterr);
break;
}
}
return 0;
}
编译和运行:
分析:
命令 gcc OptDemo.c -o OptDemo
是使用 gcc 把 OptDemo.c 编译成可执行程序,命名为 OptDemo
第一次运行 ./OptDemo -a -b -c afei
正常执行和输出
第二次运行 ./OptDemo -abc
由于选项 c 后没有输入参数,于是报错
第三次运行 ./OptDemo -d
由于选项 d 不是我们在 optstring 中预定义的选项,于是报错
一个冒号表示选项后必须有参数,没有参数就会报错。如果有两个冒号的话,那么这个参数就是可选参数了,即可有可没有。 OptDemo.c 如下:
#include <stdio.h>
#include <unistd.h>
void usage() {
printf("Usage:\n");
printf("\tOptDemo [-a] [-b] [-c message]");
}
int main(int argc, char *argv[]) {
int o;
const char *optstring = "abc::"; // 有三个选项-abc,其中c选项后有两个冒号,表示后面可选参数
while ((o = getopt(argc, argv, optstring)) != -1) {
switch (o) {
case 'a':
printf("opt is a, oprarg is: %s\n", optarg);
break;
case 'b':
printf("opt is b, oprarg is: %s\n", optarg);
break;
case 'c':
printf("opt is c, oprarg is: %s\n", optarg);
break;
case '?':
printf("发生错误时提示用户正确的使用方式\n");
usage(); // 提示使用说明
break;
}
}
return 0;
}
编译和运行:
分析:
注意这里 可选参数 选项 -c 后面跟参数的时候,一定不能有空格。
但是如果是 必选参数,即选项后面只有一个冒号,则是有没有空格都可以。
由于 optarg 都是字符串类型的,所以当我们想要整型的输入参数时,会经常用到 atio() 这个方法,这里也简单介绍一下。 atoi (表示 ascii to integer) 是把字符串转换成整型数的一个函数,包含在 <stdlib.h> 头文件中,使用方式如下:
int num = atoi(optarg);
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/130618.html原文链接:https://javaforall.cn
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有