При выполнении следующего кода:
#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
Сбой.
Я делаю что-то не так?
Составитель: i586-mingw32msvc-g++
в ОС GNU
Окружающая среда: вино (x86)
http://msdn.microsoft.com/en-us/library/wk2h68td.aspx
Если путь, режим или поток являются нулевым указателем или если filename является пустой строкой, эти функции вызывают недопустимый обработчик параметров, как описано в разделе Проверка параметров. Если выполнение может продолжаться, эти функции устанавливают errno равным EINVAL и возвращают NULL.
Короче говоря, похоже, что реализация freopen в MSVC ++ не допускает использования пути NULL.