sscanf_s, _sscanf_s_l, swscanf_s, _swscanf_s_l
Biçimlendirilmiş verileri bir dizeden okur.Bu sscanf, _sscanf_l, swscanf, _swscanf_l sürümlerinde CRT'deki Güvenlik Özellikleri içinde açıklandığı gibi güvenlik geliştirmeleri mevcut olabilir.
int sscanf_s(
const char *buffer,
const char *format [,
argument ] ...
);
int _sscanf_s_l(
const char *buffer,
const char *format,
locale_t locale [,
argument ] ...
);
int swscanf_s(
const wchar_t *buffer,
const wchar_t *format [,
argument ] ...
);
int _swscanf_s_l(
const wchar_t *buffer,
const wchar_t *format,
locale_t locale [,
argument ] ...
);
Parametreler
buffer
Depolanan veriformat
Biçim denetimi dizesi.Daha fazla bilgi için bkz. Biçim Belirtimi Alanları: scanf ve wscanf İşlevleri.argument
İsteğe bağlı bağımsız değişkenlerlocale
Kullanılacak yerel ayarı
Dönüş Değeri
Bu işlevlerin her biri, başarıyla dönüştürülen ve atanan alanların sayısını getirir; dönüş değeri, okunmuş ancak atanmamış alanları içermez.Döndürülen değer 0 ise, hiçbir alan atanmamıştır.Bir hata için veya ilk dönüştürmeden önce dizenin sonuna ulaşılırsa dönüş türü EOF öğesidir.
buffer veya format bir NULL işaretçisiyse, içinde geçersiz parametre işleyicisi Parametre Doğrulama'da tanımlandığı gibi çağrılır.Yürütmenin devam etmesine izin verilirse, bu işlevler -1 döndürür ve errno öğesini EINVAL olarak ayarlar.
Bu ve diğer hata kodları hakkında bilgi için bkz. errno, _doserrno, _sys_errlist, and _sys_nerr.
Notlar
sscanf_s İşlevi verileri okur buffer her tarafından verilen bir konuma argument.Biçim dizesinden sonra bağımsız bir tür belirleyici içinde karşılık gelen türü içeren değişkenler için işaretçiler belirtmek format.Daha az güvenli bir sürümünü farklı olarak sscanf, türü alan karakterleri kullandığınızda arabellek boyutu parametresi gereklidir c, C, s, S, ya da dize içinde içine denetim kümelerini [].Karakter arabelleği boyutu, bunu gerektiren hemen her arabellek parametresinden sonra ek bir parametre olarak sağlanmalıdır.Örneğin, bir dizeye okuyorsanız, bu dize için arabellek boyutu şöyle aktarılır:
wchar_t ws[10];
swscanf_s(in_str, L"%9s", ws, _countof(ws)); // buffer size is 10, width specification is 9
Arabellek boyutu sondaki null karakterini içerir.Genişlik belirtimi alanı, okunan belirtecin, arabelleğe sığmasını sağlamak için kullanılabilir.Bir genişlik belirtimi alanı kullanılmazsa ve okunan belirteç, arabelleğe sığamayacak kadar büyükse, o arabelleğe hiçbir şey yazılmaz.
Karakterler söz konusu olduğunda, tek bir karakter gibi okunabilir:
wchar_t wc;
swscanf_s(in_str, L"%c", &wc, 1);
Bu örnek tek bir karakter giriş dizesi okur ve sonra bir geniş karakter arabellekte saklar.Boş sonlandırılmış dizeler için birden çok karakter okuduğunuzda, işaretsiz tamsayı genişlik belirtimi ve arabellek boyutu kullanılır.
char c[4];
sscanf_s(input, "%4c", &c, _countof(c)); // not null terminated
Daha fazla bilgi için, bkz. scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l ve scanf Türü Alan Karakterleri.
[!NOT]
Boyut parametresi size_t değil unsigned türündedir.
format bağımsız değişkeni giriş alanlarının yorumlanmasını denetler ve scanf_s işlevi için format bağımsız değişkeniyle aynı forma ve işleve sahiptir.Çakışan dizeler arasında kopyalama olursa davranış tanımsızdır.
swscanf_sbir geniş karakter sürümü sscanf_s; 'deki bağımsız swscanf_s geniş karakter dizeleridir.sscanf_s çok baytlı onaltılı karakter işlemez.swscanf_s, tam genişlikli onaltılık Unicode veya "uyumluluk bölgesi" karakterlerini işlemez.Aksi takdirde, swscanf_s ve sscanf_s aynı şekilde davranır.
Bu işlevleri sürümlerini _l geçirilen yerel parametre geçerli iş parçacığı yerel kullandıkları dışında sonek özdeş.
Genel Metin Yordam Eşleşmeleri
TCHAR.H yordamı |
_UNICODE & _MBCS tanımlanmamış |
_MBCS tanımlanmış |
_UNICODE tanımlanmış |
---|---|---|---|
_stscanf_s |
sscanf_s |
sscanf_s |
swscanf_s |
_stscanf_s_l |
_sscanf_s_l |
_sscanf_s_l |
_swscanf_s_l |
Gereksinimler
Yordam |
Gerekli başlık |
---|---|
sscanf_s, _sscanf_s_l |
<stdio.h> |
swscanf_s, _swscanf_s_l |
<stdio.h> or <wchar.h> |
Ek uyumluluk bilgileri için bkz. Uyumluluk.
Örnek
// crt_sscanf_s.c
// This program uses sscanf_s to read data items
// from a string named tokenstring, then displays them.
#include <stdio.h>
#include <stdlib.h>
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 plus NULL terminator
sscanf_s( tokenstring, "%s", s, _countof(s) );
sscanf_s( tokenstring, "%c", &c, sizeof(char) );
sscanf_s( tokenstring, "%d", &i );
sscanf_s( tokenstring, "%f", &fp );
// Output the data read
printf_s( "String = %s\n", s );
printf_s( "Character = %c\n", c );
printf_s( "Integer: = %d\n", i );
printf_s( "Real: = %f\n", fp );
}
.NET Framework Eşdeğeri
Bkz. Parse yöntemleri, örneğin System::Double::Parse.
Ayrıca bkz.
Başvuru
fscanf, _fscanf_l, fwscanf, _fwscanf_l
scanf, _scanf_l, wscanf, _wscanf_l