FILE *赋值不起作用

时间:2012-12-15 14:09:14

标签: c file-io

我最近面临一些问题。我想实现我自己的fopen函数以进行错误检查。

到目前为止,还有相关的代码:

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()函数,一切正常。

2 个答案:

答案 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; }
}