0

argv 変数の解析中に C で問題が発生しました。これがタスクです:

コマンドラインからCプログラムにいくつかのパラメーターを取得しました。そのうちの 1 つは "-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」を持っています。しかし、2 つの異なる変数にも 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 を互換性のないポインター型から渡しています

私のコンパイラは次のとおりです。IDEとしてXCodeを使用するMacOS上のgcc

4

2 に答える 2

1

sscanfを知っていますか?見て:

  unsigned a,b;
  if( 2==sscanf(argv[i],"-r=%u-%u",&a,&b) )
    printf("%u-%u",a,b);
于 2012-05-02T21:12:11.150 に答える
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

そのまま使用しないでください。ケースに応じて、追加NULLのチェックxy適切に行う必要があります。

于 2012-05-02T21:02:16.820 に答える