2012-05-02 44 views
0

解析argv變量時,我在C語言中遇到問題。這是任務:在解析argv時使用C語言中的strsep變量doesen't無法工作

我有一些參數形成命令行到我的C程序。其中一個看起來像「-r = 20-5」。在那裏我必須找到「r」。這適用於:

if (argv[i][0] != 0 && argv[i][1] != 0 && argv[i][2] != 0 && 
    argv[i][0] == '-' && argv[i][2] == '=') { /* Check the Variables */ 
    switch (argv[i][1]) { 
     case 'r': 
      /* what have to be here? */ 
      break; 
} 

現在我有「r」。但我也需要20和5兩個不同的變量。這是我想說的,但它沒有工作。我嘗試一些與

strsep(argv[i]+3, "-"); 

但我的編譯器(Xcode中)拋出一個警告(警告:傳遞從兼容的指針類型「strsep」的參數1)

有沒有人有任何想法(或鏈接)如何我可以解決問題嗎?


後它的解決仍然有一個警告,所以我得到的回答後我整個新代碼:


int parse(int argc, const char *argv[]) { 
    int i, x, y; 
    int intTmp; 
    long longTmp; 
    char *strTmp; 
    char *end; 

    for (i = 1; i < argc; i++) { 
     /* check for (-?=) */ 
     if (argv[i][0] != 0 && argv[i][1] != 0 && argv[i][2] != 0 && 
      argv[i][0] == '-' && argv[i][2] == '=') { 

      /* IGNORE THIS 
      * longTmp = strtol(argv[i]+3, &end, 10); 
      * intTmp = analyseEndptr(longTmp, argv[i]+3, end); 
      */ 

      switch (argv[i][1]) { 
       case 'r': 
        strTmp = argv[i]+3;     /* <= Here I got the warning */ 
        x = atoi(strsep(&strTmp, "-")); 
        y = atoi(strsep(&strTmp, "-")); 
        printf("x=%d, y=%d\n", x, y); 
        break; 
      } 
     } 
    } 
} 

的警告是:警告:傳遞「strsep」的參數1從兼容的指針類型

我的編譯器:使用了Xcode作爲IDE

+2

'strsep'需要'字符**'作爲第一個參數,而不是一個'的char *' –

+0

或者你可以寫自己的解析器。這需要一些時間,但它會按你的意願工作。你所需要做的只是遍歷字符串。作爲分隔符,您可以使用' - '符號。 – besworland

+0

@Paul R如何從char *中獲取char **? (我很快google,但沒有好的結果) – waXve

回答

1

你知道sscanf嗎?看一看:

unsigned a,b; 
    if(2==sscanf(argv[i],"-r=%u-%u",&a,&b)) 
    printf("%u-%u",a,b); 
+0

這是一個更簡單的[另一個](http://stackoverflow.com/a/10421687/1319755)。其他人也可以工作。 – waXve

0

這裏MacOS的GCC是你如何傳遞一個字符串到strsep()

switch (argv[i][1]) { 
     char *s; 
     int x, y; 
     case 'r': 
      s = argv[i] + 3; 
      x = atoi(strsep(&s, "-")); 
      y = atoi(strsep(&s, "-")); 
      printf("x=%d, y=%d\n", x, y); 
      break; 
    } 

會產生:

x=3, y=4 

的是不要使用它。您將必須對xy進行額外的NULL檢查。

+0

很酷。這有效,但我仍然收到警告。爲什麼? (警告不好) – waXve

+0

警告是什麼?你可以發佈你的整個代碼嗎? – dpp