簡體   English   中英

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

[英]Parsing command line using argv and argc in C

我試圖找出如何從命令行獲取命令,以及何時獲取該命令執行某種方法。 我無法讓代碼識別輸入的值。 有任何想法嗎?

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的數量沒有限制

argv是一個char指針的向量。 所以每個argv[i]實際上都是一個內存地址。 由於您要比較內存位置,因此argv[1] == "a"進行常規比較將不起作用。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM