Новое программирование на C.Почему это использование fscanf приводит к сбою приложения?
Следующий раздел кода пытается прочитать список MD5 (32 символа) и соответствующее описание (до 128 символов) из текстового файла (utf-8), но вызывает сбой приложения:
HANDLE hFile = CreateFileW(good_path, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
return FALSE;
}
LPWSTR md5 = malloc(sizeof(wchar_t) * 32);
LPWSTR desc = malloc(sizeof(wchar_t) * 128);
int i;
while((i = fwscanf(hFile, L"%ls %ls", md5, desc)) != EOF)
{
if (i == 2) // OK
{
}
else // Something went wrong
{
}
}
CloseHandle(hFile);
return TRUE;
Несколько вопросов:
- Является ли мое использование таНос (...) правильно?
- Что может быть причиной аварии?
Update 1
Я взял этот код и сделал его в автономный EXE файл (а не DLL). Все еще падает.
Update 2
Обновлен fwscanf согласно комментарий Криса. Все еще падает. Если я прокомментирую строку while...fwscanf...
, она выйдет правильно.
С какой ошибкой происходит сбой? Это важно. – Carcigenicate
Код для DLL, который является плагином. Отчеты хостинг-приложения «Исключение типа 216 произошло при смещении 180002F (относительное смещение ошибки 2FBC)» – Bridgey
Является ли это файлом Unicode? Я спрашиваю, потому что замечаю, что вы используете '% ls' и' wchar_t'. В этой статье [Microsoft] (https://msdn.microsoft.com/en-us/library/cb5kac8b.aspx) указано, что «' fscanf' в настоящее время не поддерживает ввод потока UNICODE »и рекомендует вместо этого использовать' fwscanf' , – chrisaycock