S’applique à
Windows 10 Enterprise LTSB 2015

Symptômes

Lorsque vous exécutez une application qui appelle la fonction _sntscanf_s , l’appel doit renvoyer une valeur EOF(-1) . Toutefois, lorsque vous exécutez l’application sur Windows 10 entreprise 2015 LTSB, le caractère null injecté est ignoré. Ainsi, le champ numFields recevoir une valeur erronée de 1 au lieu de la valeur de la fonction EOF (-1) .

Par exemple, ce problème se produit dans l’application Visual C++ suivante :

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

Cause

Ce problème se produit en raison d’un problème connu dans la fonction common_vsscanf dans le fichier Ucrtbase.dll qui est inclus dans Windows 10 entreprise 2015 LTSB. Ce problème affecte la famille entière scanf de fonctions :

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

Résolution

Pour résoudre ce problème, maintenance de l’installation mise à jour le 8 mai 2018 — KB4103716 (système d’exploitation de Build 10240.17861).

Références

Bon de C Runtime (CRT) de refactorisation

Présentation de la CRT universel

Besoin d’aide ?

Vous voulez plus d’options ?

Explorez les avantages de l’abonnement, parcourez les cours de formation, découvrez comment sécuriser votre appareil, etc.