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*のバリアントを呼び出すことになります。ご覧のとおり、これらの関数はすべて (non-const) を取ります。 freadfscanffwhateverFILE*

これらの関数に必要なものを与える準備をする必要があります。それらが const 以外のパラメーターを取るようにプロトタイプ化されていて、それらに const パラメーターを与えようとすると、コンパイラの警告が表示されます。

このため、非 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 に答える