在C中定义自定义命令行参数?

问题描述:

我需要从终端传递'key'作为参数。它应该如下运行:
./a.out -k100101001
其中10011001是关键,-k是用于指定它的标志。
如果我需要传递一个文件名以及密钥,它应该运行如下:
./a.out -k10011001 -iparameter.txt
其中parameter.txt是文件名,-i是指定该文件的标志。

注意:我有几个参数传递和参数值后面没有空格的标志(-iparameter.txt)后面,加上我不知道标志的顺序,所以做这样的事情没有帮助。在C中定义自定义命令行参数?

int main(int argc, char **argv) { 
if (argc == 2) { 
    if (!strcmp(argv[1], "-k")) something(); 
    if (!strcmp(argv[1], "-i")) something(); 
} 

对C的任何建议?我使用Ubuntu来运行我的程序。 谢谢。

+2

试试'man 3 getopt'。 – user3386109 2015-02-08 21:47:50

通过argv使用循环应该这样做。

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

    for (numArg = 1; numArg < argc; numArg++) 
    { 
     if (argv[numArg][0] == '-') 
     { 
      switch (argv[numArg][1]) 
      { 
      case 'k' : somethingAboutKey(argv[numArg] + 2); // The parameter's value is passed directly to the function 
         break; 
      case 'i' : somethingAboutFile(argv[numArg] + 2); 
         break; 
      } 
     } 
    } 
} 
+0

这种ad hoc参数解析循环导致临时命令行语法。使用'getopt()'(或'getopt_long()')或等价的解析参数会更好。 – 2015-02-08 22:10:31