freopen не работает для C stdin

При выполнении следующего кода:

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

0

Решение

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

Если путь, режим или поток являются нулевым указателем или если filename является пустой строкой, эти функции вызывают недопустимый обработчик параметров, как описано в разделе Проверка параметров. Если выполнение может продолжаться, эти функции устанавливают errno равным EINVAL и возвращают NULL.

Короче говоря, похоже, что реализация freopen в MSVC ++ не допускает использования пути NULL.

2

Другие решения


По вопросам рекламы [email protected]