-2

1 つのmain(int argc, char *argv[])関数の名前を通常のサブ関数のように変更し、関数a(int argc, char *argv[]);を呼び出しa()ますmain()。そして、引数を渡します。例えば。

char *arg[10];

arg[0]="program_name";
arg[1]="-a";
arg[2]="1";
arg[3]="-b";
arg[4]="2";

a (5, arg);

しかし、a()返品は失敗します。a()位置で解析を停止しますarg[1]。私はこの問題で 3 日間を費やします。何か案が ?

4

3 に答える 3

1

あなたのコードは、呼び出された関数への定数へのポインターを与えますが、それはそれが期待しているものではありません。strdup渡すために使用する文字列の変更可能なバージョンを生成するために使用できます。パーサーが、一度だけ使用されることが予想されるデータを破壊的に変更することは珍しいことではありません。データが一定の場合、これは機能しません。

于 2012-08-21T11:45:28.803 に答える
1

このプログラムは動作します:

void a(int argc, char *argv[]) {
    printf("%d\n", argc);
    int i;
    for (i = 0; i < argc; ++i) {
            printf("%s\n", argv[i]);
    }
}

main( ) {
    char *arg[10];

    arg[0]="program_name";
    arg[1]="-a";
    arg[2]="1";
    arg[3]="-b";
    arg[4]="2";

    a(5, arg);
}

出力は次のとおりです。

5
program_name
-a
1
-b
2
于 2012-08-21T10:36:43.093 に答える
0

デバッガーを使用してa(...)関数にステップインし、何が起こっているかを正確に確認することをお勧めします。

于 2012-08-21T10:39:17.817 に答える