1

これが私の無邪気なプログラムです

int main(int argc, char* argv[])
{
    if(argc < 3)
    {
        printf("Sorry");
        return 0;
    }

    char key[]= "45WPbZNljDN6CUCUU6ga";
    FILE* inpFile = fopen(argv[1],"r");
    FILE* outFile = fopen(argv[2],"w");
    if(!inpFile || !outFile)
    {
        printf("oops");
        return 0;
    }

    enc(inpFile,outFile,key);
    fclose(inpFile);
    fclose(outFile);
}

enc() は別の場所で定義されていますが、問題ありません。VS2010 コマンド プロンプトを使用してコンパイルしようとすると、すべてがおかしくなりました。ただし、引数チェック ブロックを削除すると、正常にコンパイルされます。

int main(int argc, char* argv[])
{
    char key[]= "45WPbZNljDN6CUCUU6ga";
    FILE* inpFile = fopen(argv[1],"r");
    FILE* outFile = fopen(argv[2],"w");
    if(!inpFile || !outFile)
    {
        printf("oops");
        return 0;
    }

    enc(inpFile,outFile,key);
    fclose(inpFile);
    fclose(outFile);
}

何か案は?

4

2 に答える 2

7

C プログラム (VS2010 では .c 拡張子) としてコンパイルされている場合、実行ステートメントの後に変数を宣言することは有効ではありません。宣言 ( keyinpFile、およびoutFile) をすべてmain(最初のifステートメントの前に) 前に移動する必要があります。

于 2012-08-20T23:33:16.200 に答える
3

Microsoft C コンパイラは、C 言語の古い標準に準拠しており、変数の宣言は他のステートメントの前に行う必要があります (厳密な C89)。2 番目がコンパイルされる理由は、変数が最初に宣言されているためです。変数を(初期化せずに)宣言してからチェックを行い、最後に2つのファイルポインタを初期化することをお勧めします。

于 2012-08-20T23:36:26.087 に答える