致青春2小说在线阅读:带参数的主函数2
来源:百度文库 编辑:九乡新闻网 时间:2024/04/30 02:40:42
C语言规定,主函数也可以带参数,就像我们编写的用户函数一样,可以带参数,也可以不带参数。主函数的形式参数只有两个:一个形式参数是记录了参数的个数,这是一个整型的形式参数,其名称规定为“argc”;第二个形式参数依次记录了在调用该主函数(即执行程序)时给出的实际参数内容(字符串),这个形式参数是一个字符指针型数组,每个元素指向一个实际参数对应的字符串,第二个形式参数名称规定为“argv[]”。
带参数的主函数在定义时,其函数头的定义规定如下:
main(argc,argv)
int argc; /*第1个形式参数:整型*/
char *argv[]; /*第2个形式参数:字符指针型数组*/
如果主函数不带参数,执行目标程序时只要按下列格式输入程序名就可以了:
程序名↙ (其中的↙表示回车,下同)
我们通常把在操作系统下按上述格式执行目标程序时,输入的一行称为“命令行”。
若主函数带参数,则执行目标程序时,应按下列格式给出相应的实际参数:
程序名 实际参数1 实际参数2 … 实际参数n↙
上述格式也是一个命令行。
此时,系统会自动在内存开辟区域依次存放程序名和所有的实际参数,同时给主函数的形式参数赋值,结果如下:
形参argc 赋值为n+1,表示连同程序名在内共有n+1个参数。
形参argv[0]赋值为存放“程序名”字符串的首地址;
argv[1]赋值为存放“实际参数1”字符串的首地址;
.
.
.
argv[n]赋值为存放“实际参数n”字符串的首地址。
例如,有一个名为“my_copy.c”的程序,其主函数带有参数。如果在执行时,输入的命令行如下:my_copy a:\ccw1.txt b:\ccw2.txt↙
则形式参数的值如下:
argc=3
argv[0]指向字符串 "my_copy"
argv[1]指向字符串 "a:\ccw1.txt"
argv[2]指向字符串 "a:\ccw2.txt"
在程序中可以通过形式参数获得相应的实际参数,参与程序的运算和加工。
【例9-8】编一个带参数的主函数。运行时,在程序名后带有2个整数,程序的功能是输出这2个整数的和。
程序清单如下:
#include "stdlib.h" /*程序中用到数据转换类函数*/
main(argc,argv)
int argc;
char *argv[];
{ int x,y,sum;
x=atoi(argv[1]); /*将第1个实际参数对应的字符串转换成整数存入x*/
y=atoi(argv[2]); /*将第2个实际参数对应的字符串转换成整数存入y*/
sum=x+y;
printf("%d+%d=%d\n",x,y,sum);
}
假定本程序编译后的目标程序名为"test1.exe",执行该程序时输入的命令行如下:
test1 5 10↙
则程序运行后的输出结果为:5+10=15。
【例9-9】编一个程序,完成磁盘文件复制。源文件名和目标文件名随程序运行时输入。例如,复制a盘根目录下的文件ccw1.txt为a盘根目录下的ccw2.txt,则执行程序时输入的命令行如下:程序名 a:\ccw1.txt a:\ccw2.txt↙。
程序清单如下:
#include "stdio.h" /*程序中用到文件处理类函数*/
main(int argc,char *argv[])
{ FILE *fp1,*fp2;
if ((fp1=fopen(argv[1],"rb"))==NULL)
{ printf(“"file can not open!\n");
exit(0);
} /*以只读方式打开argv[1]指向的源文件名对应的二进制文件*/
if ((fp2=fopen(argv[2],"wb"))==NULL)
{ printf("file can not open!\n");
exit(0);
} /*以只写方式打开argv[2]指向的目标文件名对应的二进制文件*/
while(!feof(fp1)) /*复制源文件到目标文件*/
fputc(fgetc(fp1),fp2);
fclose(fp1); /*关闭fp1所指向的源文件*/
fclose(fp2); /*关闭fp2所指向的目标文件*/
}