Why use freopen()
? The C89 specification has the answer in one of the endnotes for the section on <stdio.h>
:
116. The primary use of the
freopen
function is to change the file associated with a standard
text stream (stderr
,
stdin
, orstdout
), as those identifiers need not be
modifiable lvalues to which the value
returned by thefopen
function
may be assigned.
freopen
is commonly misused, e.g. stdin = freopen("newin", "r", stdin);
. This is no more portable than fclose(stdin); stdin = fopen("newin", "r");
. Both expressions attempt to assign to stdin
, which is not guaranteed to be assignable.
The right way to use freopen
is to omit the assignment: freopen("newin", "r", stdin);