Aracılığıyla paylaş


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

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

Akış G/Ç

fscanf, _fscanf_l, fwscanf, _fwscanf_l

scanf, _scanf_l, wscanf, _wscanf_l

sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l

_snprintf, _snprintf_l, _snwprintf, _snwprintf_l