解析argv时在C中使用strsep变量不起作用

时间:2012-05-02 20:18:48

标签: c string parsing strtok strsep

解析argv变量时,我在C中遇到问题。这是任务:

我在命令行中有一些参数进入我的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

我的编译器是:MacOS上的gcc,使用XCode作为IDE

2 个答案:

答案 0 :(得分:1)

你知道sscanf吗?看看:

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

答案 1 :(得分:0)

以下是将字符串传递给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

请勿按原样使用。您必须根据具体情况对NULLx进行额外的y次检查。