我欲应用函数参数实现文件打开,如下:
void CDlg::FileOpen(FILE *filename)
{
filename=fopen("e:\\my.txt","w+");
}
在另一个函数实现调用和存储,如下:
FILE *file;
int number=0;
void CDlg::OnSave() 
{
FileOpen(file);
number++;
fprintf(file,"%d",number);
}
这样在运行时没错,可执行时出现错误,是不是文件指针不能做参数,不可能呀?
请多多帮忙,多谢!!!

解决方案 »

  1.   

    指针作为形参传入函数,函数返回后也不会修改file指针。
    你应该使用文件指针的指针作为参数
      

  2.   

    void CDlg::FileOpen(FILE *filename)
    {
    filename=fopen("e:\\my.txt","w+");
    }只给filename的地址赋予了新值,不能改变实参指向的内容,返回后实参任指向空.
    做个实验:
    void FileOpen(FILE *filename,int* x)
    {
    filename=fopen("e:\\my.txt","w+");
             x=0;
    }
    void main() 
    {int* y=new int;
    *y=3;
    FileOpen(file,y);//若x=0(地址赋值),则*y=3(不变);若*x=0,则*y=0;
    }////////////////////解决办法 
    FILE* CDlg::FileOpen(FILE *filename)
    {
    filename=fopen("e:\\my.txt","w+");
             return filename;
    }
    void CDlg::OnSave() 
    {
    FILE* f=FileOpen(file);
    number++;
    fprintf(f,"%d",number);
    }
      

  3.   

    再问一个问题:
    void CTeaching::FileClose(FILE *filename)
    {
    fclose(filename);
    }
    用以上函数实现文件的关闭,为什么也会出错?
    是不是和上面那个问题一样?triggerd(有点着急) 的解释我不太明白,能不能再清楚点???请帮忙!!!
      

  4.   

    triggerd(有点着急) 说得对!