c语言,书上有个例题,但我不知道什么意思.谁能帮忙看看....其中有一段代码请解释用途。。。拜托了

#include <stdio.h>
main(int argc ,char * argv[]){
FILE *pfs,*pfd ;
int i;
if((pfd=fopen(argv[1] , "w"))==NULL){
printf("cannot open destination file!\n");
exit(0) ;
}
for (i=2;i<argc;i++) { //这是什么意思
if((pfs=fopen(argv[i] , "r"))==NULL){
printf("cannot open source file1\n!") ;
exit(0) ;
}
while(!feof(pfs))
fputc(fgetc(pfs) , pfd);
fclose(pfs);
}
fclose(pfd) ;
if ((pfd=fopen(argv[1],"r"))==NULL){
printf("cannot read.\n");
exit(0);
}
while ( !feof(pfd))
putchar(fgetc(pfd));
fclose (pfd);
}

argc是参数个数。
argv[0]是程序名,argv[1]是目标文件名,argv[2],argv[3]........argv[argc - 1]是源文件名。

这个程序的功能是,把源文件的内容添加到目标文件并在屏幕上输出目标文件内容。

执行方式应该是 program destination_file source_file1 source_file2 ... source_fileN
即程序名 目标文件名 源文件名1 源文件名2 ... 源文件名N

你问的地方的用途是:打开第1个源文件,并读取源文件内容并写入目标文件,然后关闭源文件;再打开第2个源文件,读取源文件内容并把内容写入目标文件,然后关闭第2个源文件,依次类推,直至所有源文件打开并把内容写入目标文件。for()循环计数器用于计算源文件的序号。

PS:1楼说的argv[1]并不是程序的名称,数组是以0开始计数的。所以1楼的说法是错误的。
另外,这个程序是在UNIX/Linux的程序吧?
还有,这个程序有点奇怪的地方是,调用函数失败是用exit (0);退出而不是exit (1);或者设置其他非零值退出。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-22
argc 是参数的个数

argv[1] 是的程序的名称
argv[大于1] 里面是你运行的参数集合
所以下面循环 从2开始
for (i=2;i<argc;i++) 应该是能够支持 录入 多个 路径把
第2个回答  2011-08-22
printf(“========*** 主菜单 ***=========\n“); //这个打印控制台的。以下printf都是输出控制台内容
printf(“ 1. 输入职工记录\n“);
printf(“ 2. 查询职工记录\n“);
printf(“ 3. 修改职工记录\n“);
printf(“ 4. 删除职工记录\n“);
printf(“ 5. 输出职工记录\n“);
printf(“ 6. 调查工资情况\n“);
printf(“ 7. 追加职工记录\n“);
printf(“ 8. 结束使用\n“);
printf(“ 0. 退出系统\n“);
printf(“\n“);
printf(“*** 欢迎使用职工档案管理系统 ***\n“);
printf(“请选择(0-8):\n“);
scanf(“%d“,&x); //这个是接受用户输入的方法。%d是参数类型,&x输入值
switch(x) //这个是根据X选择的方法。也就是控制流语句
{
case 1: input();break; //当X=1的时候,则执行input方法。遇到break中断后面的case操作。以下的一样
case 2: search();break;
case 3: modi();break;
case 4: dele();break;
case 5: output();break;
case 6: stat();break;
case 7: run();break;
case 8: fun();break;
default:printf(“\n Wrong!“); //这个是当X不符合1-8的数字时候,输出的内容
}
if(x==0)break; //跟上面的case一样的
}
}
void input() //用户自定义的方法
{
FILE *fp; //声明指针
int n,i; //声明变量

//fopen函数用来打开一个文件,其调用的一般形式为:
//文件指针名=fopen(文件名,使用文件方式);
// 其中,
// “文件指针名”必须是被说明为FILE 类型的指针变量;
// “文件名”是被打开文件的文件名;
// “使用文件方式”是指文件的类型和操作要求。
// “文件名”是字符串常量或字符串数组。
if ((fp=fopen(“emp“,“wb“))==NULL) //这个函数是C里面内置的
{
printf(“不能建立emp文件\n“);
exit(1); //当不能建立文件是终止后续操作
}
printf(“输入职工人数:“);
scanf(“%d“,&n);
printf(“输入格式:职工号\t 姓名\t 性别\t 工龄\t 工资<Enter>\n“);
for(i=0;i<n;i++) /* 循环获取n个职工记录 */ //循环语句控制流。i是语句控制变量,i++在每循环一次后自动加1,i<n这个不用解释了吧
{
printf(“第%d个职工:“,i+1);
scanf(“%s%s%s%d%d“,emp[i].no,emp[i].name,emp[i].sex,
&emp[i].year,&emp[i].salar); //%s是字符串的格式 %d是整形的格式
}
for(i=0;i<n;i++) /*将n个职工记录写入文件*/
fwrite(&emp[i],sizeof(struct employee),1,fp); //写入文件内容,C内置的方法
fclose(fp); //关闭文件操作,也是C内置的
}
/*************************统计模块**********************/
void stat( ) //同样是个自定义方法
{
FILE *fp;
int n,num;
if((fp=fopen(“emp“,“rb“))==NULL)
{
printf(“不能打开emp文件\n“);
exit(1);
}
printf(“工资数:“);
scanf(“%d“,&num);
printf(“记录号 职工号\t 姓名\t 性别\t 工龄\t 工资\n“);
for(n=0;fread(&emp,sizeof(struct employee),1,fp);n++)
if(emp[n].salar>=num)
printf(“%6d%6s%9s%8s%8d%8d\n“,n+1,emp[n].no,emp[n].name,emp[n].sex,
emp[n].year,emp[n].salar);
fclose(fp);
}
相似回答