0

非常に単純なプログラムコードを作成しています。

まず、2 番目の引数としてオプション "-num" があります。3 番目の argc に何かを入力すると、プログラムは単に 3 番目の argc が入力されたと言うだけです。

入力と出力の例を次に示します。

入力コマンド ライン 1:

./test -num

出力 1

-num

入力コマンド ライン 2:

./test -num AnythingHere

アウトプット 2

-num 3rdArgcEntered

また、出力 2 と同じ出力が得られるように、argc を貼り付けた次のコマンド ライン (-num と AnythingHere を貼り付けます) も必要です。

./test -numAnythingHere

私が取得したい出力は次のとおりです。

-num 3rdArgcEntered

しかし、私は得ました:

None

これは私が現在取り組んでいるソースコードです:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, char *argv[])
{
    if (!strcmp(argv[1], "-num")) 
    {
        printf("-num ");

        if(argc==3){
            printf("3rdArgcEntered");
        }
    }
    else
    {
        printf("None");
    }

    printf("\n");
    return 0;
}
4

2 に答える 2

1

少しゴミ..

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, char *argv[])
{
    /* doesnt check when args are not entered */
    char *tmp = argv[1];
    char buff[5];
    /* copy -num, doesnt check */
    memcpy(buff, tmp, 4);
    buff[4] = '\0';

    if (!strcmp(buff, "-num")) 
    {
        printf("-num ");

        /* larger than -num */
        if(argc==3 || strlen(tmp) > 4 ){
        printf("3rdArgcEntered");
        }
    }
    else
    {
         printf("None");
    }

    printf("\n");
    return 0;
}
于 2014-03-30T02:02:10.323 に答える
0

プログラムは、引数の受け渡し方法に影響を与えることはできません。は明らかにmainの先頭で既に呼び出されていますmain。各引数を自分で解析するか、それを行うライブラリを使用する必要があります。自分で解析するには、 または を調べるstrtoksscanf、文字を反復処理します。ただし、 などのより具体的なライブラリをgetopt使用すると、他のコマンドライン ユーティリティと一貫した方法でプログラムを簡単に動作させることができるため、一般的には望ましいものです。

于 2014-03-30T00:58:28.813 に答える