freopen不适用于C stdin

时间:2014-11-22 17:36:50

标签: c++ binary stdin mingw32 wine

执行以下代码时:

#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)

1 个答案:

答案 0 :(得分:2)

http://msdn.microsoft.com/en-us/library/wk2h68td.aspx

  

如果path,mode或stream是空指针,或者filename是空字符串,则这些函数会调用无效参数处理程序,如参数验证中所述。如果允许继续执行,则这些函数将errno设置为EINVAL并返回NULL。

简而言之,看起来freopen的MSVC ++实现不允许使用NULL路径名。