我写的一个程序中文件指针在各函数间传递。请各位整理一下思路。
/*===============================================================*/
/* 。。。(开头部分省略) */
/* 部分函数省略 */
/* 打开号码文件,号码文件必须与该程序放在同一文件夹。*/
void OpenFile(char * argv , FILE ** fin , FILE ** fout )
{
char fname[20];
strcpy(fname,"testout.out");
*fin=(FILE *)malloc(sizeof(FILE));
*fout=(FILE *)malloc(sizeof(FILE));
if(((*fin)=(FILE *)fopen("r+",argv))==NULL)
{
printf("%s","\n Open Input File Failed !\n");
exit(0);
}
else
{
if(((*fout)=(FILE *)fopen("w+",fname))==NULL)
{ printf("%s","\n Open Output File Failed !\n");
exit(0);
}
}
return;
}
/*----------------------------------------------------------------------------------------------*/
/* 打开号码文件,号码文件必须与该程序放在同一文件夹。结果文件以接收的字符串为文件名,后缀名为.out */
void OpenFile2(char * argv1 , FILE ** fin ,char * argv2 , FILE ** fout )
{
*fin=(FILE *)malloc(sizeof(FILE));
*fout=(FILE *)malloc(sizeof(FILE));
if(((*fin)=(FILE *)fopen("r+",argv1))==NULL)
{
printf("%s","\n Open Input File Failed !\n");
exit(0);
}
else
{
if(((*fout)=(FILE *)fopen("w+",argv2))==NULL)
{ printf("%s","\n Open Output File Failed !\n");
exit(0);
}
}
return;
}
/*--------------------------------------------------------------------------*/
/* 主函数 */
int main(int argc,char * argv[])
{
FILE * fin, * fout;
char * str_old,* str_new;
fin=NULL;
fout=NULL;
str_old=(char *)calloc(sizeof(char),CODE_LEN); /* CODE_LEN为自定义的常量 */
str_new=(char *)calloc(sizeof(char),CODE_LEN);
/* 打开文件 */
switch(argc)
{
case 2 : {OpenFile(argv[1], &fin , &fout); break; }
case 3 : {OpenFile2(argv[1], &fin, argv[2], &fout);break;}
case 1 : {printf("%s","\n Input File is Missing !\n");
PrintTip(); /* 显示提示函数,省略*/
exit(0);
}
default : {printf("%s","\n You Input too many arguments !\n");
PrintTip();
exit(0);
}
}
/* 读入数据并处理,写出 */
while(!feof(fin))
{
ReadAString(&fin,str_old); /* 从*fin 中读入一个字符串传回str_old变量中 */
strcpy(str_new,str_old);
str_new=AddCode(str_new,ConvertChar(CalcMod(ConvertValue(str_new)))); /* 全是自定义的函数,最后返回一个字串 */
WriteFile(&fout,str_old,str_new); /* 将新旧字串都写入*fout文件中,使用自定义函数 */
}
/* 关闭文件 */
CloseFile(&fin,&fout);
free(str_old);
free(str_new);
return (0);
}
/*=======================================================================*/
希望大家帮忙分析一下fin、fout及其地址值在相关函数中传递的情况。
我在编译时总是打开输入文件错误,应该是地址传递时出的错,可是在逻辑上我找不出哪错了。希望大家帮我看看。