scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l

Biçimlendirilmiş verileri standart giriş akışından okur.Bu scanf, _scanf_l, wscanf, _wscanf_l sürümlerinde CRT'deki Güvenlik Özellikleri içinde açıklandığı gibi güvenlik geliştirmeleri mevcut olabilir.

int scanf_s(
   const char *format [,
   argument]... 
);
int _scanf_s_l(
   const char *format,
   locale_t locale [,
   argument]... 
);
int wscanf_s(
   const wchar_t *format [,
   argument]... 
);
int _wscanf_s_l(
   const wchar_t *format,
   locale_t locale [,
   argument]... 
);

Parametreler

  • format
    Biçim denetimi dizesi.

  • argument
    İsteğe bağlı bağımsız değişkenler.

  • locale
    Kullanılacak yerel ayar.

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.Döndürülen değer 0 ise, hiçbir alan atanmamıştır.Bir hata için veya ilk karakter okuma girişiminde bir dosya sonu karakteri veya dize sonu karakteri ile karşılaşılırsa dönüş türü EOF öğesidir.format, bir NULL işaretçisiyse, Parametre Doğrulama'da tanımlandığı gibi geçersiz parametre işleyicisi çağrılır.Yürütmenin devam etmesine izin verilirse, scanf_s ve wscanf_s işlevleri EOF döndürür ve EINVAL öğesini errno olarak ayarlar.

Bu ve diğer hata kodları hakkında bilgi için bkz. errno, _doserrno, _sys_errlist, and _sys_nerr.

Notlar

Bir scanf_s işlevi stdin standart giriş akışından verileri okur ve argument bağımsız değişken listesi tarafından verilen konumlarda verileri yazar.Her bir argument bir format tanımlayıcıya karşılık gelen değişkene işaretçi olmak zorundadır.Çakışan dizeler arasında kopyalama olursa davranış tanımsızdır.

wscanf_s geniş karakterli bir scanf_s sürümüdür; format ile ilgili biçim bağımsız değişkenler wscanf_s geniş karakterli dizelerdir.wscanf_s ve scanf_s, akış ANSI modunda açıldığında aynı şekilde çalışır.scanf_s UNICODE akıştan şu anda giriş desteklemiyor.

Bu işlevlerin sürümlerinden _l son ekine sahip olanlar özdeştir. Fakat geçerli iş parçacığı yerel ayarı yerine iletilen yerel ayar parametresini kullanan işlevler bu durumun dışında kalır.

scanf ve wscanf öğelerinin tersine, scanf_s ve wscanf_s, c, C, s, S türünde tüm giriş parametreleri veya [] içine alınan dize denetim kümeleri için arabellek büyüklüğünün belirtilmesini gerektirir.Karakter olarak arabelleği boyutu, işaretçinin arabellek veya değişkene geçirilmesinin hemen ardından ek bir parametre olarak geçirilir.Örneğin, bir dize okuyorsanız, bu dize için arabellek boyutu şöyle aktarılır:

char s[10];

scanf_s("%9s", s, _countof(s)); // buffer size is 10, width specification is 9

Arabellek boyutu sondaki null karakterini içerir.Okunan belirtecin arabelleğe sığmasını sağlamak için bir genişlik belirtimi alanını kullanabilirsiniz.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.

[!NOT]

Boyut parametresi size_t değil unsigned türündedir.

Aşağıdaki örnek, arabellek boyutu parametresinin bayt sayısını değil en fazla karakter sayısını açıkladığını gösterir.Bir wscanf_s çağrısında, arabellek türü tarafından belirtilen karakter genişliği biçim tanımlayıcısı tarafından belirtilen karakter genişliği ile eşleşmiyor.

wchar_t ws[10];
wscanf_s("%9S", ws, _countof(ws));

Bir S biçim tanımlayıcısı, işlev tarafından desteklenen varsayılan genişliğin "karşıt" karakter genişliğinin kullanımını gösterir.Karakter genişleyicisi tek baytlıktır fakat işlev çift baytlı karakterleri destekler.Bu örnek, en fazla 9 tek bayt geniş karakter dizesini okur ve bunları bir çift bayt geniş karakter arabelleğine geçirir.Karakterler tek baytlık değer olarak kabul edilir; ilk iki karakter ws[0] içinde depolanır, ikinci iki karakter ws[1] içinde depolanır ve bu şekilde devam eder.

Karakterler söz konusu olduğunda, tek bir karakter aşağıdaki gibi okunabilir:

char c;

scanf_s("%c", &c, 1);

Boş sonlandırılmış dizeler için birden çok karakter okunduğunda, tamsayılar genişlik belirtimi ve arabellek boyutu olarak kullanılır.

char c[4];

scanf_s("%4c", &c, _countof(c)); // not null terminated

Daha fazla bilgi için bkz. sacnf Genişlik Belirtimi.

Genel Metin Yordam Eşleşmeleri

TCHAR.H yordamı

_UNICODE & _MBCS tanımlanmamış

_MBCS tanımlanmış

_UNICODE tanımlanmış

_tscanf_s

scanf_s

scanf_s

wscanf_s

_tscanf_s_l

_scanf_s_l

_scanf_s_l

_wscanf_s_l

Daha fazla bilgi için bkz. Biçim Belirtimi Alanları: scanf ve wscanf İşlevleri.

Gereksinimler

Yordam

Gerekli başlık

scanf_s, _scanf_s_l

<stdio.h>

wscanf_s, _wscanf_s_l

<stdio.h> or <wchar.h>

Konsol Windows Mağazası uygulamalarında desteklenmiyor.stdin, stdout ve stderr konsolları ile ilişkili standart akış işleyicileri, C çalışma zamanı işlevleri bunları Windows Mağazası uygulamalarında kullanmadan önce yeniden yönlendirilmelidir.Ek uyumluluk bilgileri için bkz. Uyumluluk.

Örnek

// crt_scanf_s.c
// This program uses the scanf_s and wscanf_s functions
// to read formatted input.
  
#include <stdio.h>
#include <stdlib.h>

int main( void )
{
   int      i,
            result;
   float    fp;
   char     c,
            s[80];
   wchar_t  wc,
            ws[80];

   result = scanf_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 = wscanf_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 program bu girdi verildiğinde aşağıdaki çıktıyı oluşturur:

71 98.6 h z Byte characters

36 92.3 y n Wide characters

  

.NET Framework Eşdeğeri

Ayrıca bkz.

Başvuru

Kayan Nokta Desteği

Akış G/Ç

Yerel Ayar

fscanf, _fscanf_l, fwscanf, _fwscanf_l

printf, _printf_l, wprintf, _wprintf_l

sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l

sscanf, _sscanf_l, swscanf, _swscanf_l