vsscanf_s, vswscanf_s

Biçimlendirilmiş verileri bir dizeden okur. 'nin vsscanf vswscanfbu sürümleri, CRT'deki Güvenlik özellikleri bölümünde açıklandığı gibi güvenlik geliştirmelerine sahiptir.

Sözdizimi

int vsscanf_s(
   const char *buffer,
   const char *format,
   va_list argptr
);
int vswscanf_s(
   const wchar_t *buffer,
   const wchar_t *format,
   va_list arglist
);

Parametreler

buffer
Depolanan veriler

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

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

Dönüş değeri

Bu işlevlerin her biri başarıyla dönüştürülen ve atanan alan 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 EOF bir hata içindir veya ilk dönüştürmeden önce dizenin sonuna ulaşılırsa.

veya format bir işaretçiysebuffer, parametre doğrulamasında açıklandığı gibi geçersiz parametre işleyicisi NULL çağrılır. Yürütmenin devam etmesi için izin verilirse, bu işlevler -1 döndürür ve olarak EINVALayarlanırerrno.

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

Açıklamalar

işlevi, vsscanf_s bağımsız değişken listesindeki her bağımsız değişken tarafından verilen konumlardaki arglist verileri buffer okur. Bağımsız değişken listesindeki bağımsız değişkenler, içinde bir tür tanımlayıcısına formatkarşılık gelen bir türe sahip değişkenlerin işaretçilerini belirtir. Daha az güvenli sürümden vsscanffarklı olarak, [] içine alınmış c, C, s, S veya dize denetimi kümelerinin tür alanı karakterlerini kullandığınızda arabellek boyutu parametresi gerekir. Karakter cinsinden arabellek boyutu, gerektiren her arabellek parametresinden hemen sonra başka bir parametre olarak sağlanmalıdır.

Arabellek boyutu, sonlandırıcı null değerini içerir. Bir genişlik belirtimi alanı, içinde okunan belirtecin arabelleğe sığmasını sağlamak için kullanılabilir. 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.

Daha fazla bilgi için bkz scanf_s. , _scanf_s_l, wscanf_sve _wscanf_s_l scanf Tür Alanı Karakterleri.

Not

Boyut parametresi türündedir unsigned, türünde değildir size_t.

format bağımsız değişkeni, giriş alanlarının yorumlanmasını denetler ve işlevin bağımsız değişkeniyle format aynı biçime ve işleve scanf_s sahiptir. Çakışan dizeler arasında kopyalama olursa davranış tanımsızdır.

vswscanf_s , öğesinin vsscanf_sgeniş karakterli bir sürümüdür; için bağımsız değişkenler vswscanf_s geniş karakterli dizelerdir. vsscanf_s çok baytlı onaltılık karakterleri işlemez. vswscanf_s Unicode tam genişlikli onaltılık veya "uyumluluk bölgesi" karakterlerini işlemez. Aksi takdirde ve vswscanf_s vsscanf_s aynı şekilde davran.

Genel metin yordamı eşlemeleri

TCHAR.H yordamı _UNICODE ve _MBCS tanımlanmadı _MBCS tanımlanan _UNICODE tanımlanan
_vstscanf_s vsscanf_s vsscanf_s vswscanf_s

Gereksinimler

Yordam Gerekli başlık
vsscanf_s <stdio.h>
vswscanf_s <stdio.h> veya <wchar.h>

Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Örnek

// crt_vsscanf_s.c
// compile with: /W3
// This program uses vsscanf_s to read data items
// from a string named tokenstring, then displays them.

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

int call_vsscanf_s(char *tokenstring, char *format, ...)
{
    int result;
    va_list arglist;
    va_start(arglist, format);
    result = vsscanf_s(tokenstring, format, arglist);
    va_end(arglist);
    return result;
}

int main( void )
{
    char  tokenstring[] = "15 12 14...";
    char  s[81];
    char  c;
    int   i;
    float fp;

    // Input various data from tokenstring:
    // max 80 character string:
    call_vsscanf_s(tokenstring, "%80s", s, _countof(s));
    call_vsscanf_s(tokenstring, "%c", &c, sizeof(char));
    call_vsscanf_s(tokenstring, "%d", &i);
    call_vsscanf_s(tokenstring, "%f", &fp);

    // Output the data read
    printf("String    = %s\n", s);
    printf("Character = %c\n", c);
    printf("Integer:  = %d\n", i);
    printf("Real:     = %f\n", fp);
}
String    = 15
Character = 1
Integer:  = 15
Real:     = 15.000000

Ayrıca bkz.

Akış G/Ç
scanf, _scanf_l, wscanf, _wscanf_l
sscanf, _sscanf_l, swscanf, _swscanf_l
sscanf_s, _sscanf_s_l, swscanf_s, _swscanf_s_l
sprintf, _sprintf_l, swprintf, _swprintf_l, , __swprintf_l
vsscanf, vswscanf