Applies ToWin 10 Ent LTSB 2015

Pazīmes

Palaižot programmu, kas izsauc funkciju _sntscanf_s , zvanu vajadzētu atgriezties EOF(-1) vērtību. Tomēr, palaižot programmu Windows 10 uzņēmuma 2015 LTSB, ievietoto nulles vērtības rakstzīme tiks ignorēta. Tādējādi lauku numFields saņemt kļūdainu vērtību 1 , nevis EOF (-1) vērtība.

Piemēram, šī problēma rodas programmā Visual C++ šādi:

#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;
}

Iemesls

Šo problēmu izraisa zināma problēma Ucrtbase.dll failā, kas ir iekļauts Windows 10 uzņēmuma 2015 LTSB common_vsscanf funkciju. Šī problēma ietekmē visu scanf ģimenes funkcijas:

  • _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

Risinājums

Lai novērstu šo problēmu, instalējiet apkopes atjaunināt 8 maijs 2018 — KB4103716 (OS Build 10240.17861).

Atsauces

Liels C izpildlaika (CRT) Refactoring

Iepazīšanās ar vispārējo CRT

Nepieciešama papildu palīdzība?

Vēlaties vairāk opciju?

Izpētiet abonementa priekšrocības, pārlūkojiet apmācības kursus, uzziniet, kā aizsargāt ierīci un veikt citas darbības.

Kopienas palīdz uzdot jautājumus un atbildēt uz tiem, sniegt atsauksmes, kā arī saņemt informāciju no ekspertiem ar bagātīgām zināšanām.