2012-04-23 4 views
0

Я написал следующий код:WriteFile на стандартный вывод терпит неудачу после freopen

int fd = _dup(fileno(stdout)); 
FILE* tmp = freopen("tmp","w+",stdout); 
HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE); 
if (out == INVALID_HANDLE_VALUE){ 
     //error 
} 
else if (out == NULL) { 
     //error 
} 
else { 
    WriteFile(out, "num", sizeof("num"), NULL, NULL); 
} 

В последней строке я получаю утверждение «Unhandled exception...:Access violation writing location 0x000000» Что может быть проблема и исправление для него?

спасибо.

P.S: Из-за ограничения проекта я не могу использовать freopen

+1

Но вы используете 'freopen'? Вы проверяете, является ли это недопустимым дескриптором или значением null, а затем приступить к записи в файл в любом случае. В этом случае кажется, что оно равно null. Возможно, вам понадобится последний вопрос 'else' до' WriteFile'. FYI Я бы порекомендовал 'std :: fstream' в C++ – AJG85

+0

@ AJG85 - // Ошибка команды возвращает дескриптор ошибок, поэтому он не может попасть в WriteFile.BUT (для вашего conveneince) Я изменил код для вас. И ошибка все еще происходит – Yakov

ответ

4

только один из двух последних параметров для WriteFile может быть NULL, то другой должен быть действительным указателем.

http://msdn.microsoft.com/en-us/library/windows/desktop/aa365747.aspx

В вашем случае вы, вероятно, хотите использовать lpNumberOfBytesWritten.

DWORD written; 
WriteFile(out, "num", sizeof("num"), &written, NULL); 

 Смежные вопросы

  • Нет связанных вопросов^_^