当前位置: 代码迷 >> 综合 >> getopt 方法详解和使用示例
  详细解决方案

getopt 方法详解和使用示例

热度:57   发布时间:2023-12-22 11:19:00.0

getopt 方法详解和使用示例

getopt() 方法是用来分析命令行参数的,该方法由 Unix 标准库提供,包含在 <unistd.h> 头文件中。

int getopt(int argc, char * const argv[], const char *optstring);extern char *optarg;
extern int optind, opterr, optopt;

getopt 参数说明:

  • argc:通常由 main 函数直接传入,表示参数的数量
  • argv:通常也由 main 函数直接传入,表示参数的字符串变量数组
  • optstring:一个包含正确的参数选项字符串,用于参数的解析。例如 “abc:”,其中 -a,-b 就表示两个普通选项,-c 表示一个必须有参数的选项,因为它后面有一个冒号

外部变量说明:

  • optarg:如果某个选项有参数,这包含当前选项的参数字符串
  • optind:argv 的当前索引值
  • opterr:正常运行状态下为 0。非零时表示存在无效选项或者缺少选项参数,并输出其错误信息
  • optopt:当发现无效选项字符时,即 getopt() 方法返回 ? 字符,optopt 中包含的就是发现的无效选项字符

demo示例


#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;

在代码实例中

const char *optstring = "abc:";

表示可是输入三个执行选项即:-a -b ,以及-c ,但是-c 选项后面必须有一个参数 。会保存在外部变量optarg中、

const char *optstring = "abc::";

一个冒号表示选项后必须有参数,没有参数就会报错。如果有两个冒号的话,那么这个参数就是可选参数了,即可有可没有。
注意这里 可选参数 选项 -c 后面跟参数的时候,一定不能有空格。但是如果是 必选参数,即选项后面只有一个冒号,则是有没有空格都可以。

输入字符串转 int
由于 optarg 都是字符串类型的,所以当我们想要整型的输入参数时,会经常用到 atio() 这个方法,这里也简单介绍一下。atoi (表示 ascii to integer) 是把字符串转换成整型数的一个函数,包含在 <stdlib.h> 头文件中,使用方式如下:

int num = atoi(optarg);

参考:https://blog.csdn.net/afei__/article/details/81261879