الأعراض

عند تشغيل تطبيق الذي يستدعي الوظيفة _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 العالمي

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

الخروج من الخيارات إضافية؟

استكشف مزايا الاشتراك، واستعرض الدورات التدريبية، وتعرف على كيفية تأمين جهازك، والمزيد.

تساعدك المجتمعات على طرح الأسئلة والإجابة عليها، وتقديم الملاحظات، وسماعها من الخبراء ذوي الاطلاع الواسع.