C 语言 命令行选项

发布于 2024-03-22 22:43:08 字数 2619 浏览 23 评论 0

命令行选项用到 getopt() 函数,需要 unistd.h 头文件,getopt() 函数的原型为:

getopt(int argc,char </em>const argv[],const char <em>optstring)

这个函数要配合 main 函数使用,argc 和 argv 一般就将 main 函数的那两个参数原样传入。

如下例子:

# include <unistd.h>

int main(int argc, char </em>argv[]) {<br>        int ch;        // 用于接收命令行选项的字符
    opterr=0;    // 全局变量 opterr=0 用于隐藏错误
    while ((ch = getopt(argc, argv, "a:b::cde")) != EOF) {        // 或 != -1
        printf("optind:%d\n", optind);
        printf("optarg:%s\n", optarg);
        printf("ch:%c\n\n", ch);

        switch (ch) {
            case 'a':
                printf("option a:'%s'\n\n", optarg);
                break;
            case 'b':
                printf("option b:'%s'\n\n", optarg);
                break;
            case 'c':
                printf("option c\n\n");
                break;
            case 'd':
                printf("option d\n\n");
                break;
            case 'e':
                printf("option e\n\n");
                break;
            default:
                printf("other option\n\n");
                break;
        }
    }
    printf("optopt + %c\n", optopt);

    // optind 保存了 getopt() 函数从命令行读取了几个选项
    // 跳过已读取的选项
    argc -= optind;
    argv += optind;     // 偏移量(指针运算符,数组首地址)

    return 0;
}

gcc 编译后运行:

./main -a1234 -b567 -c -d -f

输出:

optind:2
optarg:1234
ch:a

option a:'1234'

optind:3
optarg:567
ch:b

option b:'567'

optind:4
optarg:(null)
ch:c

option c

optind:5
optarg:(null)
ch:d

option d

optind:6
optarg:(null)
ch:?

other option

optopt + f

main 函数总共接收了 6 个参数:

argc=6;
argv[0]=./main       // 程序自身
argv[1]=-a1234<br>    argv[2]=-b567
argv[3]=-c
argv[4]=-d
argv[5]=-f
  • optstring 是一段自己规定的选项串,例如本例中的 ab:cde ,表示可以有, -a , -b , -c , -d , -e 这几个参数。
  • : :表示必须该选项带有额外的参数,全域变量 optarg 会指向此额外参数;
  • :: :标识该额外的参数可选(有些 Uinx 可能不支持 :: )。
  • optind:全域变量指示下一个要读取的参数在 argv 中的位置,在 argv 中第几个.
  • opterr:如果 getopt() 找不到符合的参数则会印出错信息,并将全域变量 optopt 设为 ? 字符。如果不希望 getopt() 印出错信息,则只要将全域变量 opterr 设为 0 即可。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

北风几吹夏

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

内心激荡

文章 0 评论 0

JSmiles

文章 0 评论 0

左秋

文章 0 评论 0

迪街小绵羊

文章 0 评论 0

瞳孔里扚悲伤

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文