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: Parse yöntemleri, gibi System::Double::Parse.
Ayrıca bkz.
Başvuru
fscanf, _fscanf_l, fwscanf, _fwscanf_l
printf, _printf_l, wprintf, _wprintf_l