вы должны попытаться проверить, что perror говорит об ошибке. Используйте как это:
perror("fopen");
будет выводиться сообщение, подобное этому:
fopen: <error description here>
Я полагаю, поскольку вы используете ferror, когда ваш файловый объект имеет значение NULL, эта ошибка 32 - просто случайный мусор, как упоминалось в другой публикации, вероятно, отсутствие захвата указателя NULL. используйте errno / perror, чтобы получить ошибку, которая помешала вам открыть файл. на самом деле, указатель NULL на ferror запрещен.
РЕДАКТИРОВАТЬ: Я нахожу удивительным, что как perror, так и errno не поддерживаются этим компилятором. Я рекомендую вам найти правильные функции обнаружения ошибок и использовать их. в этом случае, конечно, не правда.
РЕДАКТИРОВАТЬ: посмотрите GetLastError () и FormatMessage () , они должны поддерживаться. http://msdn.microsoft.com/en-us/library/ms680582(VS.85).aspx также имеет пример использования там. Хотя вам, вероятно, придется заменить функции «безопасной строки» в Microsoft на обычные Си. (например: StringCchPrintf -> _snprintf / sprintf)
Небольшой поиск в Google показывает, что это может сработать для вас. Это не мой код, но выглядит разумно:
// OS provides a system error string
DWORD dwError = GetLastError();
CString csDescription;
FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, dwError, MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
csDescription.GetBuffer(255), nSize, NULL );
csDescription.ReleaseBuffer();