تصحيح: دالات scanf VC + + لا عائد EOF(-1) لتسب عام 2015 المؤسسة 10 Windows

الأعراض

عند تشغيل تطبيق الذي يستدعي الوظيفة _sntscanf_s ، يجب الاتصال بإرجاع قيمة غير EOF(-1) . ومع ذلك، عند تشغيل التطبيق على Windows 10 المؤسسة عام 2015 لتسب، يتم تجاهل حرف خالية تم إدراجها. يؤدي هذا الحقل نومفيلدس لتلقي قيمة خاطئة 1 بدلاً من قيمة EOF (-1) .

على سبيل المثال، تحدث هذه المشكلة في تطبيق Visual c + + التالية:

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

السبب

تحدث هذه المشكلة بسبب وجود مشكلة معروفة في الدالة common_vsscanf في الملف Ucrtbase.dll المضمنة في Windows لتسب 2015 المؤسسة 10. تؤثر هذه المشكلة على الأسرة الكامل scanf المهام:

  • _vsscanf_l

  • فسكانف

  • _sscanf_l

  • سكانف

  • _vsscanf_s_l

  • vsscanf_s

  • _sscanfs_l

  • sscanf_s

  • _snscanf_l

  • _snscanf_s

  • _snscanf_s_l

  • _snscanf_s

  • _vswscanf_l

  • فسوسكانف

  • _swscanf_l

  • سوسكانف

  • _vswscanf_s_l

  • vswscanf_s

  • _wsscanfs_l

  • swscanf_s

  • _snwscanf_l

  • _snwscanf_s

  • _snwscanf_s_l

  • _snwscanf_s

الحل

خدمات تثبيت تحديث لحل هذه المشكلة، 8 مايو عام 2018-KB4103716 (10240.17861 بنية نظام التشغيل).

المراجع

وقت التشغيل (CRT) C كبير إعادة بناء التعليمات البرمجية

عرض CRT العالمي

هل تحتاج إلى مزيد من المساعدة؟

توسيع المهارات
استكشاف التدريب
الحصول على الميزات الجديدة أولاً
الانضمام إلى Microsoft Insider

هل كانت المعلومات مفيدة؟

نشكرك على ملاحظاتك!

شكراً لك على الملاحظات! يبدو أنه من المفيد إيصالك بأحد وكلاء دعم Office لدينا.

×