C ++传递FILE *作为函数的参数

时间:2013-10-12 12:13:42

标签: c++ windows file arguments

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

我想知道我是否应该说

void DoSomething(FILE *uFile)

void DoSomething(const FILE *uFile)

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

我像这样创建FILE *:

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

谢谢。

3 个答案:

答案 0 :(得分:4)

无论您将FILE*传递给哪个功能,最终都会调用fread / fscanf / fwhatever的某些变体。如果你看,所有这些函数都采用(非常量)FILE*

您需要准备好为这些功能提供所需的功能。如果他们原型化采用非const参数,并且您尝试给它们一个const参数,那么您将收到编译器警告。

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

答案 1 :(得分:1)

当您将指针作为参数传递给该对象时,C ++永远不会复制对象。 Const不在那里做关于复制的声明,它是关于修改的声明。所以你不必担心泄漏。正如其他人所指出的那样,所有采用FILE*的函数都将其视为非常数,所以无论如何你只需将其抛弃。

答案 2 :(得分:0)

你可以选择:

void DoSomething(const FILE *uFile)

没有创建文件重复。