Áp dụng cho
Windows 10 Enterprise LTSB 2015

Triệu chứng

Khi bạn chạy ứng dụng gọi hàm _sntscanf_s , cuộc gọi sẽ trả về một giá trị EOF(-1) . Tuy nhiên, khi bạn chạy ứng dụng trên Windows 10 Enterprise 2015 LTSB, ký tự rỗng tiêm được bỏ qua. Điều này khiến trường numFields để nhận một giá trị sai 1 thay vì giá trị EOF (-1) .

Ví dụ: sự cố này xảy ra trong ứng dụng Visual C++ sau đây:

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

Nguyên nhân

Sự cố này xảy ra do sự cố các chức năng common_vsscanf trong tệp Ucrtbase.dll được bao gồm trong Windows 10 Enterprise 2015 LTSB. Vấn đề này ảnh hưởng đến dòng toàn bộ scanf chức năng:

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

Giải pháp

Để giải quyết vấn đề này, cài đặt dịch vụ Cập Nhật 8 tháng 5 năm 2018-KB4103716 (OS xây dựng 10240.17861).

Tham khảo

Thời gian lớn C (CRT) Refactoring

Giới thiệu CRT phổ biến

Bạn cần thêm trợ giúp?

Bạn muốn xem các tùy chọn khác?

Khám phá các lợi ích của gói đăng ký, xem qua các khóa đào tạo, tìm hiểu cách bảo mật thiết bị của bạn và hơn thế nữa.