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),在可执行语句后声明变量是无效的。您需要将声明(key、、inpFileoutFile)全部移到main(在第一个if语句之前)的前面。

于 2012-08-20T23:33:16.200 回答
3

Microsoft C 编译器遵循旧的 C 语言标准,其中变量声明必须在任何其他语句之前完成(严格的 C89)。第二次编译的原因是首先声明了变量。我建议声明你的变量(不初始化)然后进行检查,然后最后初始化你的 2 个文件指针。

于 2012-08-20T23:36:26.087 回答