Aracılığıyla paylaş


vscanf_s, vwscanf_s

Standart giriş akışından biçimlendirilmiş verileri okur. 'nin vscanf vwscanfbu sürümleri, CRT'deki Güvenlik özellikleri bölümünde açıklandığı gibi güvenlik geliştirmelerine sahiptir.

Sözdizimi

int vscanf_s(
   const char *format,
   va_list arglist
);
int vwscanf_s(
   const wchar_t *format,
   va_list arglist
);

Parametreler

format
Denetim dizesini biçimlendir.

arglist
Değişken bağımsız değişken listesi.

Dönüş değeri

Başarıyla dönüştürülen ve atanan alanların sayısını döndürür; dönüş değeri okunmuş ancak atanmamış alanları içermez. 0 dönüş değeri, hiçbir alanın atanmadığını gösterir. Dönüş değeri bir hataya yöneliktir EOF veya ilk karakter okuma denemesinde dosya sonu karakteriyle veya dize sonu karakteriyle karşılaşılırsa. bir işaretçiyseformat, parametre doğrulama bölümünde açıklandığı gibi geçersiz parametre işleyicisi çağrılır.NULL Yürütmenin devam etmesi için izin verilirse, vscanf_s vwscanf_s döndürerek EOF olarak EINVALayarlayınerrno.

Bunlar ve diğer hata kodları hakkında bilgi için bkz. errno, _doserrno, _sys_errlistve _sys_nerr.

Açıklamalar

İşlev, vscanf_s standart giriş akışındaki stdin verileri okur ve bağımsız değişken listesi tarafından arglist verilen konumlara yazar. Listedeki her bağımsız değişken, içindeki bir tür tanımlayıcısına formatkarşılık gelen bir tür değişkeninin işaretçisi olmalıdır. Çakışan dizeler arasında kopyalama olursa davranış tanımsızdır.

vwscanf_s , öğesinin vscanf_sgeniş karakterli bir sürümüdür; format bağımsız değişkeni vwscanf_s geniş karakterli bir dizedir. vwscanf_s ve vscanf_s akış ANSI modunda açıldığında aynı şekilde davranır. vscanf_s UNICODE akışından gelen girişi desteklemez.

ve vwscanfvscanf_s 'in aksine vscanf ve vwscanf_s c, C, s, S türündeki tüm giriş parametreleri veya [] içine alınmış dize denetimi kümeleri için arabellek boyutunun belirtilmesi gerekir. Karakterlerdeki arabellek boyutu, arabelleğe veya değişkene işaret eden işaretçinin hemen ardından başka bir parametre olarak geçirilir. Dizenin wchar_t karakter cinsinden arabellek boyutu bayt cinsinden boyutla aynı değildir.

Arabellek boyutu, sonlandırıcı null değerini içerir. Okunan belirtecin arabelleğe sığdığından emin olmak için genişlik belirtimi alanı kullanabilirsiniz. Hiçbir genişlik belirtimi alanı kullanılmazsa ve içinde okunan belirteç arabelleğe sığmayacak kadar büyükse, bu arabelleğe hiçbir şey yazmaz.

Not

size parametresi türündedirunsigned, türünde değildirsize_t.

Daha fazla bilgi için bkz . scanf Width Specification.

Genel metin yordamı eşlemeleri

TCHAR.H yordamı _UNICODE ve _MBCS tanımlanmadı _MBCS tanımlanan _UNICODE tanımlanan
_vtscanf_s vscanf_s vscanf_s vwscanf_s

Daha fazla bilgi için bkz . Belirtim alanlarını biçimlendirme: scanf ve wscanf işlevleri.

Gereksinimler

Yordam Gerekli başlık
vscanf_s <stdio.h>
wscanf_s <stdio.h> veya <wchar.h>

Konsol Evrensel Windows Platformu (UWP) uygulamalarında desteklenmez. C çalışma zamanı işlevlerinin UWP uygulamalarında kullanabilmesi için önce konsolu stdin, , stdoutve stderrile ilişkilendirilmiş standart akış tanıtıcılarının yeniden yönlendirilmesi gerekir. Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Örnek

// crt_vscanf_s.c
// compile with: /W3
// This program uses the vscanf_s and vwscanf_s functions
// to read formatted input.

#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>

int call_vscanf_s(char *format, ...)
{
    int result;
    va_list arglist;
    va_start(arglist, format);
    result = vscanf_s(format, arglist);
    va_end(arglist);
    return result;
}

int call_vwscanf_s(wchar_t *format, ...)
{
    int result;
    va_list arglist;
    va_start(arglist, format);
    result = vwscanf_s(format, arglist);
    va_end(arglist);
    return result;
}

int main( void )
{
    int   i, result;
    float fp;
    char  c, s[81];
    wchar_t wc, ws[81];
    result = call_vscanf_s("%d %f %c %C %s %S", &i, &fp, &c, 1,
                           &wc, 1, s, _countof(s), ws, _countof(ws) );
    printf( "The number of fields input is %d\n", result );
    printf( "The contents are: %d %f %c %C %s %S\n", i, fp, c, wc, s, ws);
    result = call_vwscanf_s(L"%d %f %hc %lc %S %ls", &i, &fp, &c, 2,
                            &wc, 1, s, _countof(s), ws, _countof(ws) );
    wprintf( L"The number of fields input is %d\n", result );
    wprintf( L"The contents are: %d %f %C %c %hs %s\n", i, fp, c, wc, s, ws);
}

Bu programa örnekte giriş verildiğinde şu çıkışı üretir:

71 98.6 h z Byte characters
36 92.3 y n Wide characters
The number of fields input is 6
The contents are: 71 98.599998 h z Byte characters
The number of fields input is 6
The contents are: 36 92.300003 y n Wide characters

Ayrıca bkz.

Matematik ve kayan nokta desteği
Akış G/Ç
Yerel ayar
printf, _printf_l, wprintf, _wprintf_l
scanf, _scanf_l, wscanf, _wscanf_l
scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l
vscanf, vwscanf