sscanf_s
, _sscanf_s_l
, swscanf_s
, _swscanf_s_l
Biçimlendirilmiş verileri bir dizeden okur. Bu , _sscanf_l
, , _swscanf_l
swscanf
sürümlerininsscanf
, CRT'deki Güvenlik özellikleri bölümünde açıklandığı gibi güvenlik geliştirmeleri vardır.
Sözdizimi
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 veriler
format
Biçim denetimi dizesi. Daha fazla bilgi için bkz . Belirtim alanlarını biçimlendirme: scanf
ve wscanf
işlevleri.
argument
İsteğe bağlı bağımsız değişkenler
locale
Kullanılacak yerel ayar
Dönüş değeri
Bu işlevlerin her biri başarıyla dönüştürülen ve atanan alan sayısını döndürür. Dönüş değeri okunmuş ancak atanmamış alanları içermez. 0 dönüş değeri, hiçbir alanın atanmadığını gösterir. Dönüş değeri EOF
bir hata içindir veya ilk dönüştürmeden önce dizenin sonuna ulaşılırsa.
veya format
bir işaretçiysebuffer
, parametre doğrulamasında açıklandığı gibi geçersiz parametre işleyicisi NULL
çağrılır. Yürütmenin devam etmesi için izin verilirse, bu işlevler -1 döndürür ve errno
EINVAL
Bunlar ve diğer hata kodları hakkında bilgi için bkz. errno
, _doserrno
, _sys_errlist
ve _sys_nerr
.
Açıklamalar
sscanf_s
işlevi, buffer
verilerini her argument
biri tarafından verilen konuma okur. Biçim dizesinden sonraki bağımsız değişkenler, içindeki bir tür tanımlayıcısına format
karşılık gelen türe sahip değişkenlerin işaretçilerini belirtir. Daha az güvenli sürümden sscanf
farklı olarak, içine alınan []
tür alanı karakterlerini c
, , C
s
, veya S
dize denetim kümelerini kullandığınızda bir arabellek boyutu parametresi gerekir. Karakter cinsinden arabellek boyutu, gerektiren her arabellek parametresinden hemen sonra ek parametre olarak sağlanmalıdır. Örneğin, bir dizeyi okuyorsanız, bu dizenin arabellek boyutu aşağıdaki gibi geçirilir:
wchar_t ws[10];
swscanf_s(in_str, L"%9s", ws, (unsigned)_countof(ws)); // buffer size is 10, width specification is 9
Arabellek boyutu, sonlandırıcı null değerini içerir. Bir genişlik belirtimi alanı, içinde okunan belirtecin arabelleğe sığmasını sağlamak için kullanılabilir. Hiçbir genişlik belirtimi alanı kullanılmazsa ve içinde okunan belirteç arabelleğe sığmayacak kadar büyükse, bu arabelleğe hiçbir şey yazmaz.
Tek bir karakter aşağıdaki gibi okunabilir:
wchar_t wc;
swscanf_s(in_str, L"%c", &wc, 1);
Bu örnek, giriş dizesinden tek bir karakteri okur ve ardından geniş karakterli bir arabelleğe depolar. Null olmayan sonlandırılan dizeler için birden çok karakter okuduğunuzda, genişlik belirtimi ve arabellek boyutu olarak işaretsiz tamsayılar kullanılır.
char c[4];
sscanf_s(input, "%4c", &c, (unsigned)_countof(c)); // not null terminated
Daha fazla bilgi için bkzscanf_s
. , _scanf_s_l
, _wscanf_s_l
wscanf_s
ve scanf
tür alanı karakterleri.
Not
Boyut parametresi türündedir unsigned
, türünde değildir size_t
. 64 bit hedefler için derleme yaparken, statik bir dönüştürme kullanarak veya sizeof
sonuçları doğru boyuta dönüştürün_countof
.
format
bağımsız değişkeni, giriş alanlarının yorumlanmasını denetler ve işlevin bağımsız değişkeniyle format
aynı biçime ve işleve scanf_s
sahiptir. Çakışan dizeler arasında kopyalama olursa davranış tanımsızdır.
swscanf_s
, öğesinin sscanf_s
geniş karakterli bir sürümüdür; için bağımsız değişkenler swscanf_s
geniş karakterli dizelerdir. sscanf_s
çok baytlı onaltılık karakterleri işlemez. swscanf_s
Unicode tam genişlikli onaltılık veya "uyumluluk bölgesi" karakterlerini işlemez. Aksi takdirde ve swscanf_s
sscanf_s
aynı şekilde davran.
Bu işlevlerin son ekine _l
sahip sürümleri, geçerli iş parçacığı yerel ayarı yerine geçirilen yerel ayar parametresini kullanmaları dışında aynıdır.
Genel metin yordamı eşlemeleri
TCHAR.H olağan |
_UNICODE ve _MBCS tanımlanmadı |
_MBCS tanımlanan |
_UNICODE tanımlanan |
---|---|---|---|
_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> veya <wchar.h> |
Daha fazla uyumluluk bilgisi 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, (unsigned)_countof(s) );
sscanf_s( tokenstring, "%c", &c, (unsigned)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 );
}
String = 15
Character = 1
Integer: = 15
Real: = 15.000000
Ayrıca bkz.
Akış G/Ç
fscanf
, _fscanf_l
, fwscanf
, _fwscanf_l
scanf
, _scanf_l
, wscanf
, _wscanf_l
sprintf
, _sprintf_l
, swprintf
, _swprintf_l
, , __swprintf_l
snprintf
, _snprintf
, _snprintf_l
, _snwprintf
, , _snwprintf_l