1

我想将 FILE * 传递给另一个函数。在此函数中,使用 fread 从文件中读取一些字节。不执行写入。

我想知道我是否应该说

void DoSomething(FILE *uFile)

或者

void DoSomething(const FILE *uFile)

我害怕在某处引入内存泄漏,并认为 const 可能更安全。当我不正确地传递它时,我担心该函数可能会创建文件的副本。

我像这样创建 FILE *:

FILE *outfile  = fopen("c:\\myfile.dat", "wb");

谢谢你。

4

3 回答 3

4

无论您传递FILE*给什么功能,最终都会调用fread/ fscanf/的某些变体fwhatever。如果您看,所有这些函数都采用 (non-const) FILE*

您需要准备好为这些功能提供所需的功能。如果它们的原型设计为采用非常量参数,并且您尝试为它们提供 const 参数,则会收到编译器警告。

出于这个原因,我会传入一个非常量FILE*

于 2013-10-12T12:19:53.190 回答
1

当您将指向该对象的指针作为参数传递时, C++ 永远不会复制该对象。const 不是用来声明复制的,它是用来声明修改的。因此,您不必担心泄漏。正如其他人所指出的那样,所有接受它的函数都将它设为非常量,所以无论如何你只需要把它扔掉。FILE*

于 2013-10-12T12:31:13.600 回答
0

你可以去:

void DoSomething(const FILE *uFile)

不会创建文件的副本。

于 2013-10-12T12:15:50.567 回答