5

ここで、プロジェクト オプション自体 ([構成プロパティ] -> [デバッグ]) で Visual Studio にコマンド ライン引数を指定する際に、実際に問題が発生しています。

int main(int argc)この「 」は、「int main(int main_i)」が機能しなかった後に書きました。プロジェクトの MS Visual Studio プロパティ ページのコマンド ライン引数で、何を記述すればよいかわかりません。ファイルを読み書きするかどうかを指定するために単一の整数を渡したいだけなので、単なる int argc です。char は必要ありません*argv[]。コマンド ライン引数のテキスト ボックスでいくつかの値を試しましたが、実行時に exe ファイルに到達せず、まったく入力しなかった値が表示されます。

MSVS C++ プロパティ ページのコマンド ライン引数スペースに何を入力する必要があるかについて、簡単な例を 1 つだけ教えていただけませんか? コマンドライン引数をMSVSに与える方法の例が見つかりません。

また、コマンドライン引数の値のみを変更しただけなのに、なぜプロジェクト全体を再構築する必要があるのか​​ もわかりません??

4

6 に答える 6

11

プログラムに単一の整数コマンド ライン引数を理解させたい場合でも、 and を使用する必要がargcありargvます。このようなものはそれを行うべきです:

int main(int argc, char *argv[]) {

    if (argc < 2) {
        fprintf(stderr, "Need a command line argument.\n");
        exit(1);
    }

    int arg = atoi(argv[1]);
    // now you have an integer
    // do whatever with it...
}

C 標準では、main関数に特定のパラメーター セットが必要です。許可されている組み合わせの 1 つに(int, char *[]). パラメータには好きな名前を付けることができますが、ほとんどの場合、 and と呼ばれargcますargv

于 2012-07-15T04:20:48.390 に答える
6

名前確立された慣習に過ぎず、任意の名前を使用できます (眉をひそめるかもしれませんが) が、指定された順序で両方の引数を使用したコードしか見たことがありません。

ANSI 以前の時代には、単純に .. を使用することができましたがint main()、現在でも ..argc argvは通常提供されています。

パラメータの 1 つだけを指定することはできません。

于 2012-07-15T04:20:42.323 に答える
5

変数名はコンパイラ専用です。これらは、バイナリ イメージのアドレスに変換されます。main には最大 3 つのパラメーターを渡すことができます。

これが私が試したものです-

int main(int i, char* a[], char* e[])

ご覧のとおり、名前は通常の名前ではありません。最初のパラメータはコマンド ライン引数の数、2 番目は引数の実際の配列、3 番目は環境変数の配列です。

実際、main は任意の数の引数を取ることができますが、3 番目以降の残りは無効になります。これはまだコンパイルされます-

int main(int i, char* a[], char* e[], char* j[])

楽しみのために、これを行うこともできます-

int main(int i, float a, float b, float c, float d, float e)
于 2012-07-15T04:29:10.590 に答える
4

単純なmainものでも許可されており、それでもそれらの引数にアクセスできます。

int main()
{
    int nArgCount = __argc;
    char** pArgs= __argv;

    printf("Argument Count: %d\n", nArgCount-1);
    printf("Arguments:");

    for(int nIndex = 1; nIndex<nArgCount; ++nIndex)
        printf("%s, ", pArgs[nIndex]);
}

GetCommandLine関数を使用してコマンド ラインにアクセスすることもできます。mainの引数を持っていない/使用していないことの重要な側面は、どの関数でもコマンドライン引数にアクセスできることです。

于 2012-07-15T07:55:00.710 に答える
1

他の人が述べたように、それは単に便宜の問題であり、カーニハンとリッチーがその方法で運ばれた最初のCバージョンでそれらの議論を使用したことです。

何でも自由に使用できます。

簡単な例を次に示します。

#include <iostream>

int main(int arglen, char *args[])
{
        std::cout << "Running: " << *args << std::endl;
    while (--arglen > 0)
        std::cout << *++args << std::endl;
    return 0;
}

Visual C ++2010Expressを使用しています。その場合は、Alt + F7を押してプロジェクトのプロパティを表示し、[構成のプロパティ]> [デバッグ]に移動して、コマンドライン引数をに入力しますCommand Arguments

それでおしまい。

于 2012-07-15T05:38:10.213 に答える
1

char *argv[]コマンドライン引数の値を読み取る場合は、を使用する必要があります。そうでなければ、あなたはそれを落とすことができます。

2つのことを区別するために単一の整数が必要な場合は、これを行う1つの方法があります。あるものにはコマンドライン引数を渡すだけで、他のものには渡さないでください。今、あなたは必要ありませんchar *argv[]。ここで、コマンドライン引数を1つだけ渡すと、の値argc2、つまり、実行可能ファイルの名前+コマンドライン引数になります。

また、コマンドライン引数を渡さない場合、その値は1、つまり実行可能ファイルの名前のみになります。

于 2012-07-15T08:12:26.267 に答える