Gejala

Ketika Anda menjalankan aplikasi yang memanggil fungsi _sntscanf_s , panggilan akan mengembalikan nilai EOF(-1) . Namun, ketika Anda menjalankan aplikasi di Windows 10 Enterprise 2015 LTSB, karakter null dimasuki diabaikan. Hal ini menyebabkan kolom numFields untuk menerima nilai keliru 1 nilai EOF (-1) .

Misalnya, masalah ini terjadi di aplikasi Visual C++ berikut ini:

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

Penyebab

Masalah ini terjadi karena masalah yang diketahui dalam fungsi common_vsscanf dalam file Ucrtbase.dll yang disertakan dalam Windows 10 Enterprise 2015 LTSB. Masalah ini mempengaruhi keluarga seluruh scanf fungsi:

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

Pemecahan masalah

Untuk mengatasi masalah ini, Instal Layanan pembaruan 8 Mei 2018 — KB4103716 (OS membangun 10240.17861).

Referensi

Waktu jalan C besar (CRT) Refactoring

Memperkenalkan Universal CRT

Perlu bantuan lainnya?

Kembangkan keterampilan Anda
Jelajahi pelatihan
Dapatkan fitur baru terlebih dahulu
Gabung Microsoft Insider

Apakah informasi ini bermanfaat?

Seberapa puaskah Anda dengan kualitas bahasanya?
Apa yang memengaruhi pengalaman Anda?

Terima kasih atas umpan balik Anda!

×