Cメインパラメータ

stasio14:

私は、主なパラメータを表示しなければならないコードを書いたが、私はそれをコンパイルし、「*」のプログラムのショー、私のファイル構造に入力されたとき。このようなCMDのルックスでコマンド:program.exe 1 2 3 *

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

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

結果は次のとおりです。

program
1
2
3
program.c
program.exe
10-03-20
11-02-20

そして、私の質問は:それは、代わりにファイルをリストの「*」印刷するプログラムを強制することは可能です。アドバイスのおかげで

池上:

mingwのは、パラメータのワイルドカード展開を実行するためのプログラムが発生します。この動作を無効にするには、あなたのプログラムに以下を追加します。

int _CRT_glob = 0;

Unixの世界では、シェルはワイルドカード拡張を行うことが期待されます。

$ perl -le'print for @ARGV' *
a
b

Windowsの世界では、ワイルドカードの展開は、アプリケーションに任されています。

>perl -le"print for @ARGV" *
*

そのトリッキーなポータブルプログラムを記述することができます。mingwのは、多くの場合、心の中のWindowsと書かれていなかったコンパイルプログラム、自動的にパラメータのそのCランタイムライブラリが実行ワイルドカード展開するために使用されているので。

a.c

#include <stdio.h>

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

    return 0;
}
>gcc -Wall -Wextra -pedantic-errors a.c -o a.exe & a *
a
a.c
a.exe

しかし、mingwのは、アウトを提供します。あなたのプログラムに次を追加すると、この動作を無効にします。

int _CRT_glob = 0; 

a.c

#include <stdio.h>

int _CRT_glob = 0; 

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

    return 0;
}
>gcc -Wall -Wextra -pedantic-errors a.c -o a.exe & a *
a
*

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=377230&siteId=1