0

argc以外の他のカウンター変数を使用せずに、プログラムの引数を出力する1つのライナープログラムを作成する必要があります。でも:

問題1.引数を昇順ではなく、降順で出力します。

問題2.gccとclは異なる結果を生成しますが、どちらが正しいですか?

while(argc>0) printf("Argument %d is %s\n",--argc,argv[argc]);
4

4 に答える 4

5

あなたがワンライナーを探しているなら、これは助けなしでやってくれますargc

while(*argv) printf("Argument is %s\n",*argv++);

argv[argc]NULLであることが保証されています。

これもコードの問題です。で渡すargv[argc]%s、未定義の動作が発生します。もう1つはargc、介在するシーケンスポイントなしでの変更です。

于 2013-02-25T13:22:19.083 に答える
3

どれも正しくありません。未定義動作は決して正しくありません。

于 2013-02-25T13:11:47.360 に答える
3

それ以外argcの場合は値の変更を移動します。printfUndefined Behaviour

while((argc--)>0) printf("Argument %d is %s\n",argc,argv[argc]);

問題は次の理由によるものです。

関数の引数の評価順序は指定されていません

于 2013-02-25T13:16:44.170 に答える
3

どの引数が最初に実行されるかは保証されないため、この方法でプログラムを作成しないでください。

C++標準5.2.2/8によると:

接尾辞式と引数式の評価はすべて、相互に順序付けられていません。引数式の評価のすべての副作用は、関数が入力される前に順序付けられます

またはが最初に実行され、動作は定義されていません--argcargv[argc]

于 2013-02-25T13:19:29.607 に答える