代码之家  ›  专栏  ›  技术社区  ›  Hook

对argv中的参数使用条件

  •  0
  • Hook  · 技术社区  · 11 年前

    例如,我试图接受argv中的参数并在其中使用条件

    程序的入口将是这样的

    ./program-t-d-m

    我想做这样的事 如果==-t,则在变量中保存数字的值 如果==-d,则在变量中保存字符串的值

    我想这样做,因为程序的入口可以是这样的

       ./program -d <string> -m <char> -t <number>
       ./program -m <char> -d <string>  -t <number>
    

    我该怎么做?我试图使用getopt,但我不明白

    1 回复  |  直到 11 年前
        1
  •  2
  •   David C. Rankin    11 年前

    如何处理几个短期期权的问题始终是快速 strcmp getopt 如上所述使用。对于一些选项 字符串比较函数 。下面是使用 字符串比较函数 使用您的选项:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main (int argc, char *argv[])
    {
        if (argc < 7) {
            fprintf (stderr, "Error, insufficient input.\n  Usage: %s -d <string> -m <char> -t <int>\n", argv[0]);
            return 1;
        }
    
        int it;
        char *str = NULL;
        char chr;
        int  num;
    
        for (it = 1; it < argc; it++) {
            if (strcmp ("-d", argv[it]) == 0 && it < (argc - 1))
                str = strdup (argv[it+1]);
            if (strcmp ("-m", argv[it]) == 0 && it < (argc - 1))
                chr = *argv[it+1];
            if (strcmp ("-t", argv[it]) == 0 && it < (argc - 1))
                num = atoi (argv[it+1]);
        }
    
        printf ("\nOptions entered:\n\n");
        printf ("  str: %s\n  chr: %c\n  num: %d\n\n", str, chr, num);
    
        return 0;
    }
    

    编译:

    gcc -Wall -Wextra -o bin/opts opts.c
    

    运行:

    $ ./bin/opts -d "this is my string" -m c -t 2048
    

    输出:

    Options entered:
    
      str: this is my string
      chr: c
      num: 2048