Aracılığıyla paylaş


scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l

Okuma standart giriş akış verileri biçimlendirilmiş. Sürümleri bunlar scanf, _scanf_l, wscanf, _wscanf_l açıklandığı gibi güvenlik geliştirmeleri ile crt güvenlik özellikleri.

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ılı bir şekilde dönüştürülür ve atanan alanların sayısını verir; dönüş değerini okuyabilir ancak atanmamış alanları içermez. 0 Döndürülen değeriyle hiçbir alan atanmış olan gösterir. Dönüş değeri EOF için bir hata veya dosya sonu karakteri veya dize sonu karakteri bir karakter okumak için ilk girişimi ile karşılaştı. format Olan bir NULL işaretçisi geçersiz parametre işleyici çağrıldığında, açıklandığı gibi Parametre doğrulama. Yürütülmesine devam etmek için izin verilip verilmediğini scanf_s ve wscanf_s geri EOF ve errno için EINVAL.

Bunlar ve diğer hata kodları hakkında daha fazla bilgi için bkz: _doserrno, hatano, _sys_errlist ve _sys_nerr.

Notlar

scanf_s İşlevi standart giriş akışından verileri okur stdin ve verileri tarafından verilen konumuna yazar argument. Her argument türü belirticisi karşılık gelen bir türünde bir değişken için bir işaretçi olmalıdır format. Kopyalama, üst üste dizeler arasında yer alıyorsa, davranışı tanımsızdır.

wscanf_sgeniş karakter sürümü scanf_s; format bağımsız değişkeni wscanf_s bir geniş karakter dizesidir. wscanf_sve scanf_s akış ANSI modunda açılırsa aynı şekilde aynı şekilde davranır. scanf_sşu anda UNICODE akış girişten desteklemiyor.

Bu işlevleri sürümlerini _l sonek dışında geçerli iş parçacığı yerel geçirilen yerel ayar parametresi kullandıkları aynı.

Unlike scanfand wscanf, scanf_sand wscanf_srequire the buffer size to be specified for all input parameters of type c, C, s, S, or [. Karakter arabelleği boyutu, işaretçiyi arabellek veya değişken hemen ek bir parametre olarak geçirilir. Örneğin, bir dize okumak, bu dize için arabellek boyutu gibi aktarılır:

char s[10];

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

Sonunda boş arabellek boyutunu içerir. Genişlik belirtimi alan okunan belirteci arabelleğine sığacak şekilde olması için kullanılabilir. Hiçbir genişlik belirtimi alan kullanılır ve belirteç arabellekte sığmayacak kadar büyük okuma, hiçbir şey bu arabelleğe yazılır.

Not

Boyut parametresi türüdür unsigneddeğil size_t.

Aşağıdaki örnek arabellek boyutu parametresi en fazla karakter, değil bayt sayısını açıklar gösterir. SQLConfigDataSource çağrısında wscanf_s, ara bellek türü tarafından belirtilen karakter genişliği biçim belirticisi tarafından belirtilen karakter genişliği eşleşmiyor.

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

S Biçim belirticisi "karşıt" işlevi tarafından desteklenen varsayılan genişliği olan karakter genişliği kullanımını gösterir. Tek baytlık karakter genişliği, ancak bu işlev çift baytlı karakterleri destekler. Bu örnek, en fazla 9 tek bayt geniş karakter dizesi, okur ve onları bir çift bayt geniş karakter bir arabellek geçirir. Karakterleri tek baytlık değer olarak kabul edilir; ilk iki karakter depolanır ws[0], ikinci iki depolanır ws[1]ve benzeri.

Karakterler söz konusu olduğunda, bir tek bir karakter şöyle:

char c;

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

Birden çok karakter null olmayan sonlandırılmış dizeler okurken, tamsayı genişlik belirtimi ve arabellek boyutu kullanılır.

char c[4];

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

Daha fazla bilgi için bkz. scanf genişlik belirtimi.

Genel metin eşlemeleri yordamına girildi

TCHAR.H yordamına girildi

_UNICODE & _mbcs tanımlanmamış

Tanımlanan _mbcs

Tanımlanan _UNICODE

_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 işlevlerini ve wscanf işlevlerini.

Gereksinimler

Yordamı

Gerekli başlık

scanf_s, _scanf_s_l

<stdio.h>

wscanf_s, _wscanf_s_l

<stdio.h> veya <wchar.h>

Konsol desteklenen değil Windows Mağazası apps. Konsolu ile ilgili standart akış tanıtıcıları stdin, stdout, ve stderr, c çalışma zamanı işlevlerini de kullanılmadan önce yönlendirilecek Windows Mağazası apps. Ek uyumluluk bilgileri için bkz: Uyumluluk giriş.

Ö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);
}
  

.NET Framework Eşdeğeri

Ayrıca bkz.

Başvuru

Kayan nokta türü desteği

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