main函数行参的疑惑?
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
/*文件加密模块*/
int dofile (char *in_fname,char *pwd,char *out_file)
{
FILE *fp1,*fp2; /*定义文件指针*/
register char ch; /*寄存器变量ch*/
int j=0;
int j0=0;
fp1=fopen(in_fname, "rb ");/*读取待加密文件*/
if(fp1==NULL) /*判断文件是否读取成功*/
{
printf( "cannot open in-file.\n ");
exit(1); /*如果不能打开要加密的文件,便退出程序*/
}
fp2=fopen(out_file, "wb ");/*创建新文件*/
if(fp2==NULL) /*判断文件是否创建成功*/
{
printf( "cannot open or create out-file.\n ");
exit(1); /*如果不能建立加密后的文件,便退出*/
}
while (pwd[++j0]);
ch=fgetc(fp1);
/*加密算法开始*/
while(!feof(fp1))
{
fputc(ch^pwd[j> =j0?j=0:j++],fp2);/*异或后写入fp2文件*/
ch=fgetc(fp1);
}
fclose (fp1); /*关闭源文件*/
fclose(fp2); /*关闭目标文件*/
return (0);
}
int main (int argc,char *argv[])/*定义main()函数的命令行参数*/
{
char in_fname[30]; /*存放源文件名数组*/
char out_fname[30]; /*存放目标文件名数组*/
char pwd[8]; /*用来保存密码*/
if (argc!=4)
{ /*容错处理*/
printf( "\nIn-fname:\n ");
gets(in_fname); /*源文件名*/
printf( "Password:\n ");
gets(pwd); /*给定密码*/
printf( "Out-file:\n ");
gets(out_fname); /*目标文件名*/
dofile(in_fname,pwd,out_fname);/*进入加密子函数*/
}
else
{ /*如果命令行参数正确,便直接运行程序*/
strcpy(in_fname,argv[1]);
strcpy(pwd,argv[2]);
strcpy(out_fname,argv[3]);
dofile(in_fname,pwd,out_fname);
}
getch ();
return (0);
}
上面代码中,main函数的参数代表什么?main并没有被调用?
[解决办法]
要在命令行下输入:文件名 in_fname out_fname pwd
[解决办法]
main()函数及其参数
C++标准允许主函数main()有或没有参数列表。 您能在主函数main()中使用一个或更多的参数。 如下是一些惯例:
int main(int argc, char *argv[])
第一个参数argc,指明有多少个参数将被传递给主函数main(),真正的参数以字符串数组(即第2个参数argv[])的形式来传递。每一个字符串均有自己意思。在这句法上面, 记住, argc代表参数的数量, main()函数本身是在索引0为的第一参数。 所以, argc总是至少为1 。它的总数是从argv列阵的元素数目。 这意味着, argv[0]的值是至关重要的。 如果用户在控制台环境中程序名称后键入含参数的指令, 那么随后的参数将传递给argv[1] 。
[解决办法]
main函数的参数分别代表in_fname,pwd,out_fname
你可以在命令行上这样调用 **.exe infile anonymous outfile
如果直接调用:**.exe
屏幕上提示输入这几个参数
In-fname:
Password:
Out-file:
[解决办法]
写了一遍居然丢掉了。
main函数是程序的入口,所有编译好的程序执行,都从main开始。
main的参数有两个。
int argc表示main函数的参数的个数,包括程序名称。
char *argv[]表示参数的字符串数组。
例如;你把程序编译为run.exe,在命令行执行:run.exe a b c
则argc为4,
argv为{ "run.exe ", "a ", "b ", "c "}
可以在程序中输出argc和argv看看。