到目前为止,还有相关的代码:
enum _Errorcode_ openFile( const char * c_str_filename, const char * c_str_mode, FILE* the_file )
{
the_file = fopen( c_str_filename, c_str_mode );
if( the_file == NULL )
{
return FILE_IO_ERROR;
}
else
{
return OK;
}
}
我这样称呼函数:
FILE * oFile = NULL;
...
ErrorCode = openFile( "myfile.txt", "r", oFile );
如果我之后检查oFile的指针addr,它仍然指向NULL。 奇怪的是,我的功能恢复正常,没有失败。为什么会这样?
文件存在,如果我这样调用fopen()函数,一切正常。
答案 0 :(得分:2)
C按值传递参数,因此您指定了oFile的副本,这就是为什么您没有看到openFile()
之外的更改。
将指针传递给它,如下所示:
enum _Errorcode_ openFile( const char * c_str_filename, const char * c_str_mode, FILE** the_file )
{
*the_file = fopen( c_str_filename, c_str_mode );
if( *the_file == NULL )
{
return FILE_IO_ERROR;
}
else
{
return OK;
}
}
....
FILE * oFile = NULL;
...
ErrorCode = openFile( "myfile.txt", "r", &oFile );
答案 1 :(得分:1)
因为C总是按值传递,例如传递给函数的参数是原始变量的副本,您需要将指针传递给FILE *
:
enum _Errorcode_ openFile( const char * c_str_filename, const char * c_str_mode,
FILE** the_file )
{
*the_file = fopen( c_str_filename, c_str_mode );
if( *the_file == NULL ) { return FILE_IO_ERROR; }
else { return OK; }
}