2011-12-04 44 views
1

我想要做的是接受命令行參數並根據參數更改一些變量。我附加了一大段代碼,因爲整個代碼大約是400行。在C中正確解析命令行參數

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
int main(int argc, char *argv[]) { 

    char somestring[500]; 
    int ca=0; 
    if (argc==1) //if no arguments are specified use defaults 
    { 
    } 
    else 
    { 
     while(ca<argc) 
     { 
       ca++ 
      if(strcmp(argv[ca],"-f")==0) 
      { 
       printf("This works"); 
       ca++; 
       if(strcmp(argv[ca],"red")==0){ 
        printf("this will print red\n"); 
       } 
       else{ 
        printf("invalid color"); 
       } 
      } 
      if(strcmp(argv[ca),"")==0) 
      { 
       printf("invalid argument"); 
      } 
      else { 
       strcat(somestring,argv[ca]); 
      } 
     } 
     printf("%s",somestring); 
    } 
} 

如果用戶輸入:

./foobar -f紅色這是一個字符串

程序應該打印:

「這將打印紅這是一個字符串「

如果用戶輸入:

./foobar -f紅色

程序應打印 「無效號碼的命令行參數」。

這樣做最簡單的方法是什麼?我嘗試了很多可能性,但沒有運氣。 不同數量的參數是我的主要問題(我也有超過5個選項,例如..- f -b -h -w -e)

幫助將不勝感激。如果你願意,我可以添加我的整個代碼。

+1

如果你不把文字「這是一個stri ng「之間,程序會將每個單詞解釋爲單個參數 –

+0

查看#include http://www.crasseux.com/books/ctutorial/argp-example。html也http://stackoverflow.com/questions/7677562/whats-the-difference-between-argp-and-getopt –

回答

0

變化中斷CA = 0爲int CA = 1

由於的argv [0]是你的可執行

+0

對不起,我沒有從我的c文件正確複製代碼,現在檢查它。謝謝。 –

5

通過這個鏈接,你會找到如何輕鬆做到全面支持命令行的描述名字參數:

http://www.gnu.org/s/hello/manual/libc/Getopt.html

+0

太棒了!非常感謝 ! –

+0

這不是一個好的答案。在這裏添加一些信息+這個鏈接。請參閱[是否只包含其他鏈接的答案,真的是「好答案」?](http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers/8259#8259) –

+0

好的,我明白了,編輯 – Nips

0

事情會變得更加清晰,如果你使用一個for循環,而不是傻「而其他」結構:

for(ca=1; ca < argc ; ca++) 
    { 
     if(!strcmp(argv[ca],"-f")) 
     { 
     printf("This works"); 
     ca++; /* need to test if ca can be incremented */ 
     if(!strcmp(argv[ca],"red")){ 
      printf("this will print red\n"); 
     } 
     else{ 
      printf("invalid color"); 
     } 
     } 
     else if(!strcmp(argv[ca],"")) 
     { 
     printf("invalid argument"); 
     } 
     else{ 
      strcat(somestring,argv[ca]); 
     } 
    } 
    printf("%s",somestring); 
1
char somestring[500]="";//need initialize 

    while(++ca<argc){//increment before condition test 
     if(strcmp(argv[ca],"-f")==0){ 

      if(ca < argc && strcmp(argv[ca],"red")==0){//need ca check 

     if(ca == argc){//bad strcmp(argv[ca],"") 
      printf("invalid argument");