在C中使用argv和argc解析命令行

时间:2014-04-03 13:19:46

标签: c command-line-arguments command-prompt argv

我试图弄清楚如何从命令行获取命令以及何时获取该命令执行某种方法。我无法获得识别输入值的代码。有什么想法吗?

getopts,fgets或其他任何类型的东西都没有。

int main(int argc, char *argv[]){
int i = 1;

while((argc > 1) && (argv[i] != "d")) {
   switch (argv[i]) {
     case: "a":
       callMethodA(atoi(argv[i+1]));
       break;
     case: "b":
       callMethodB(atoi(argv[i+1]));
       break;
     case: "c":
       callMethodC(atoi(argv[i+1]));
       break;
     default:
       printf("command not recognized");
   }
   argc++
   i+=2;
}

假设发生的事情是输入:

a 3 5 1 b 2 1 c      4

它会调用函数callMethodA(),参数int为3,所以

callMethodA(3);
callMethodA(5);
callMethodA(1);
callMethodB(2);
callMethodB(1);
callMethodC(4);

来自PureW建议的编辑

int i = 1;

while((argc > 1) && (strcmp(argv[i], "d") != 0)) {
    if(strcmp(argv[i], "a")) callMethodA(atoi(argv[i+1]));
    else if(strcmp(argv[i], "b")) callMethodB(atoi(argv[i+1]));
    else if(strcmp(argv[i], "c")) callMethodC(atoi(argv[i+1]));

    argc++;
    i+=2;
}

对命令的顺序或值cal

的数量没有限制

1 个答案:

答案 0 :(得分:2)

argv是char指针的向量。所以每个argv[i]实际上都是一个内存地址。由于您要比较内存位置,因此将argv[1] == "a"作为常规比较将无效。

您要做的是使用strcmp(argv[1], "a")http://www.cplusplus.com/reference/cstring/strcmp/