vscanf_s
, vwscanf_s
Standart giriş akışından biçimlendirilmiş verileri okur. 'nin vscanf
vwscanf
bu 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 EINVAL
ayarlayınerrno
.
Bunlar ve diğer hata kodları hakkında bilgi için bkz. errno
, _doserrno
, _sys_errlist
ve _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 format
karşı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_s
geniş 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 vwscanf
vscanf_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
, , stdout
ve stderr
ile 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