Симптоми

Когато стартирате приложение, което извиква функцията _sntscanf_s , поканата трябва да се върне EOF(-1) стойност. Въпреки това когато стартирате приложението на Windows 10 Enterprise 2015 LTSB, вложен празен знак се игнорира. Това води до numFields поле, за да получите грешна стойност 1 вместо стойността EOF (-1) .

Например този проблем възниква в следните приложения на Visual C++:

#include "stdafx.h"
#include "string.h"
#include "stdlib.h"

int main()
{
    TCHAR szBuff[256];
    double temp = 0;
    wcscpy_s(szBuff, L"77777777");

    // this should force the _sntscanf_s to return an EOF (-1) value
    szBuff[0] = '\0';

    int numFields = _sntscanf_s(szBuff, _countof(szBuff), _T("%lf"), &temp);
    if (numFields == EOF)
    {
        printf("Correct Behavior!!!\r\n");
    }
    else
    {
        printf("BUG: _sntscanf_s failed to return EOF!!!\r\n");
    }
    return 0;
}

Причина

Този проблем възниква поради известен проблем в common_vsscanf функция в Ucrtbase.dll файл, който е включен в Windows 10 Enterprise 2015 LTSB. Този проблем засяга цялата scanf семейството на функции:

  • _vsscanf_l

  • vsscanf

  • _sscanf_l

  • sscanf

  • _vsscanf_s_l

  • vsscanf_s

  • _sscanfs_l

  • sscanf_s

  • _snscanf_l

  • _snscanf_s

  • _snscanf_s_l

  • _snscanf_s

  • _vswscanf_l

  • vswscanf

  • _swscanf_l

  • swscanf

  • _vswscanf_s_l

  • vswscanf_s

  • _wsscanfs_l

  • swscanf_s

  • _snwscanf_l

  • _snwscanf_s

  • _snwscanf_s_l

  • _snwscanf_s

Решение

За да разрешите този проблем, инсталирайте обслужване актуализация 8-ми май 2018-KB4103716 (OS компилация 10240.17861).

Препратки

Много C Runtime (CRT) Refactoring

Въвеждане на универсалната CRT

Нуждаете ли се от още помощ?

Искате ли още опции?

Разгледайте ползите от абонамента, прегледайте курсовете за обучение, научете как да защитите устройството си и още.

Общностите ви помагат да задавате и отговаряте на въпроси, да давате обратна връзка и да получавате информация от експерти с богати знания.