我欲应用函数参数实现文件打开,如下:
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);
}
这样在运行时没错,可执行时出现错误,是不是文件指针不能做参数,不可能呀?
请多多帮忙,多谢!!!
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);
}
这样在运行时没错,可执行时出现错误,是不是文件指针不能做参数,不可能呀?
请多多帮忙,多谢!!!
解决方案 »
- 征求建议
- 有个问题一直困扰我
- 如何进行VARIANT和结构体类型转换
- 怎么开发自己的解释性语言?对一些语法分析应该是怎么个思路?
- 帮忙看看:我这个数据库用哪一种数据库访问技术比较合适呢?
- 【求救】程序调试的运行的时候提示在debug目录下olelink.cpp有问题!
- 关于Ctrl+Alt+Del的问题
- opencv 问题 保存成avi视频时 release 生成的好用 debug 生成的文件是空
- DLL 模块如何访问主控程序中定义的变量
- 我的天哪,大家慢慢看吧
- 用Directx开发的程序,用户在安装时也必须安装Directx吗?
- 我想继承 CSplitterWnd 类分割窗口 但是 在VC中如何继承啊 找不到这个类 555
你应该使用文件指针的指针作为参数
{
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);
}
void CTeaching::FileClose(FILE *filename)
{
fclose(filename);
}
用以上函数实现文件的关闭,为什么也会出错?
是不是和上面那个问题一样?triggerd(有点着急) 的解释我不太明白,能不能再清楚点???请帮忙!!!