一千萬個為什麽

搜索

C中的CLI參數

我們正在開發一個程序,它應該接受同一個參數的多個輸入。例如。

program1 -A arg1 -A arg2 -A arg3 -B arg4 -B arg5 -B arg6

更復雜的是,-A和-B參數具有1:1的關系。所以arg1映射到arg4,所以一個。

那麽上面的例子是最好的方法可以提供多個相同的參數列表嗎?或者這是接受的方式?

最佳答案

C語言提供函數 getopt 來解析命令行選項。 getopt_long 函數是一個GNU擴展,它解析命令行選項,提供比 getopt 更多的功能,例如多字符選項解析。您可以在此處找到文檔: http://linux.die.net/man/3/getopt_long或只是一個人 getopt_long 。 讓我舉個例子。假設您有一個程序有3個選項(-h表示幫助消息,-i表示顯示整數,-s表示字符串)。首先,您必須聲明結構選項。此結構將包含程序所需的所有選項,並按以下方式定義:

    struct option {
    const char *name;//the option name
    int has_arg;//if your option has an argument - no_argument (equivalent to 0) if no option and required_argument otherwise (1)
    int *flag;//specifies how results are returned for a long option. If flag is NULL, then getopt_long() returns val
    int val;//is the value to return, or to load into the variable pointed to by flag.
};

作為您的程序有很多選項,您必須聲明一個struct選項數組:

struct option options[] = {
{"help", no_argument, NULL, 'h'},//for the help msg
{"int", 1, required_argument, 'i'},//display an int
{"string", required_argument, NULL, 's'},//displays a string
{NULL, 0, NULL, 0}};

您可以閱讀以下選項:

 int main(int argc, char* argv[]){

      char opt;
     while ((opt = getopt_long (argc, argv, "his:", options, NULL)) != -1) {
  switch(opt){
        case 'h': printf("Help message \n"); exit(0);
        case 'i': printf("Int options = %d\n", optarg);break;
        case 's': printf("String option = %s\n", optarg); break;
        default:  printf("Help message\n");
   }

    }

Don't forget to include "getopt.h"

祝你好運

轉載註明原文: C中的CLI參數