c - 解析多个参数行

标签 c parsing command-line-arguments getopt

我真的有麻烦了,我想像这样解析多个参数行:

./a.out -a 0 L
./a.out -ab
./a.out -abc

我尝试用 getopt 来做,但没有成功。事实是我无法像这样处理多个参数

./a.out -abc
./a.out -edg

有什么方法可以按照我想要的方式使用 getopt 之类的函数吗?

或者我应该考虑这样做(使用 getopt):

./a.out -a -b
./a.out -a -b -c

最佳答案

"a::"使 -a 带有可选参数。 -a 本身设置 options 标志以获得两个单独的参数。 -带有附加选项的 aopt 接受 opt

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
    int c = 0;
    int each = 0;
    int options = 0;

    if ( !( argc == 2 || argc == 4)) {
        fprintf(stderr, "Usage:\t%s -aopt\n or\n\t%s -a opt1 opt2\n", argv[0], argv[0]);
        return 1;
    }
    while((c = getopt(argc, argv, "a::")) != -1) {

        switch(c) {
            case 'a':
                if ( optarg) {// -aopt
                    printf ( "%s\n", optarg);
                }
                else {
                    options = 1;// -a by itself
                }
                break;
            default:
                fprintf(stderr, "Usage:\t%s -aopt\n or\n\t%s -a opt1 opt2\n", argv[0], argv[0]);
                return 1;
        }
    }
    if ( optind + 2 == argc) {
        if ( options) {
            for ( each = optind; each < argc; each++) {
                if ( ( argv[each][0] != '-')) {
                    printf ( "found argument %s\n", argv[each]);
                }
            }
        }
        else {
            fprintf(stderr, "Usage:\t%s -aopt\n or\n\t%s -a opt1 opt2\n", argv[0], argv[0]);
            return 1;
        }
    }

    return 0;
}

关于c - 解析多个参数行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36497149/

相关文章:

c - 此 C 代码的输出是什么(在没有任何命令行参数的情况下运行)?

c# - 按需输出使用 DragonFruit 的帮助

c++ -/Zc :wchar_t- mean? 中的减号是什么

search - 确定一个词 "is"- 对标记进行分类

c - 解析 txt 文件并写入 2 个单独的文件

c - 当我通过 ffmpeg 获取 RTSP 流时如何创建缓冲区?

c - 3n+1在线评委计划

python - 使用 ConfigParser 读取没有节名的文件

c - 棋盘游戏程序中的数组

c++ - GNU 链接器 : errors if pointer in header file is declared NULL and/or extern