这是我无辜的计划
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);
}
有什么想法吗?
答案 0 :(得分:7)
如果它被编译为C程序(带VS2010的.c扩展名),则在可执行语句之后声明变量是无效的。您需要将声明(key
,inpFile
和outFile
)全部移到main
的前面(在第一个if
声明之前)
答案 1 :(得分:3)
Microsoft C编译器遵循C语言的旧标准,其中变量声明必须在任何其他语句之前完成(严格C89)。第二次编译的原因是因为变量是先声明的。我建议声明你的变量(不进行初始化),然后进行检查,最后初始化你的2个文件指针。