Se aplică laWin 10 Ent LTSB 2015

Simptome

Când executați o aplicație care apelează funcția _sntscanf_s , apelul ar trebui să returnează o valoare EOF(-1) . Cu toate acestea, când executați aplicația pe Windows 10 Enterprise 2015 LTSB, infiltrat caracter nul este ignorat. Acest lucru provoacă câmpul numFields să primească o valoare eronate 1 în locul valorii EOF (-1) .

De exemplu, această problemă apare în aplicația Visual C++ următoare:

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

Cauza

Această problemă se produce din cauza unei probleme cunoscute în funcția common_vsscanf în fișierul Ucrtbase.dll care este inclus în Windows 10 Enterprise 2015 LTSB. Această problemă afectează întreaga scanf familie de funcții:

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

Rezolvare

Pentru a rezolva această problemă, instalați servicing Actualizare 8 mai 2018 — KB4103716 (OS compilare 10240.17861).

Referințe

Mare C Runtime (CRT) Refactoring

Vă prezentăm Universal CRT

Aveți nevoie de ajutor suplimentar?

Doriți mai multe opțiuni?

Explorați avantajele abonamentului, navigați prin cursurile de instruire, aflați cum să vă securizați dispozitivul și multe altele.