执行以下代码时:
#include <iostream>
using std::cout;
#include <cstdio>
/* stdin
stdout
FILE
freopen */
int main() {
for (FILE* f : {stdin, stdout})
if (nullptr == freopen(nullptr, (f == stdin) ? "rb" : "wb", f))
cout << f << '\n';
}
...我得到以下输出:
0x7edde180
...这意味着freopen(nullptr, "rb", stdin)
返回nullptr
,失败。
我做错了吗?
编译器:GNU OS上的i586-mingw32msvc-g++
环境:葡萄酒(x86)
答案 0 :(得分:2)
http://msdn.microsoft.com/en-us/library/wk2h68td.aspx
如果path,mode或stream是空指针,或者filename是空字符串,则这些函数会调用无效参数处理程序,如参数验证中所述。如果允许继续执行,则这些函数将errno设置为EINVAL并返回NULL。
简而言之,看起来freopen的MSVC ++实现不允许使用NULL路径名。