vfscanf_s
, vfwscanf_s
Biçimlendirilmiş verileri bir akıştan okur. vfscanf, vfwscanf'ın bu sürümleri, CRT'deki Güvenlik özellikleri bölümünde açıklandığı gibi güvenlik geliştirmelerine sahiptir.
Sözdizimi
int vfscanf_s(
FILE *stream,
const char *format,
va_list arglist
);
int vfwscanf_s(
FILE *stream,
const wchar_t *format,
va_list arglist
);
Parametreler
stream
Yapı işaretçisi FILE
.
format
Biçim denetimi dizesi.
arglist
Değişken bağımsız değişken listesi.
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. Bir hata oluşursa veya ilk dönüştürmeden önce dosya akışının sonuna ulaşılırsa, dönüş değeri ve vfwscanf_s
için vfscanf_s
olurEOF
.
Bu işlevler parametrelerini doğrular. stream
Geçersiz bir dosya işaretçisi veya format
null işaretçiyse, bu işlevler Parametre doğrulama bölümünde açıklandığı gibi geçersiz parametre işleyicisini çağırır. Yürütmenin devam etmesi için izin verilirse, bu işlevler döndürülerek EOF
olarak EINVAL
ayarlanırerrno
.
Açıklamalar
işlevi, vfscanf_s
geçerli konumundaki stream
verileri bağımsız değişken listesi (varsa) tarafından arglist
verilen konumlara okur. Listedeki her bağımsız değişken, içindeki bir tür tanımlayıcısına format
karşılık gelen bir tür değişkeninin işaretçisi olmalıdır. format
, giriş alanlarının yorumlanmasını denetler ve için bağımsız değişkenle aynı form ve işleve format
sahiptir; açıklaması format
için scanf_s
bkz. Belirtim alanlarını biçimlendirme: scanf
ve wscanf
işlevleri. vfwscanf_s
, öğesinin vfscanf_s
geniş karakterli bir sürümüdür; için biçim bağımsız değişkeni vfwscanf_s
geniş karakterli bir dizedir. Akış ANSI modunda açıldığında bu işlevler aynı şekilde davranır. vfscanf_s
şu anda bir UNICODE akışından girişi desteklemez.
Daha güvenli işlevler (soneki olan_s
) ile diğer sürümler arasındaki temel fark, daha güvenli işlevlerin her c
bir , , C
s
, S
ve [
tür alanının karakter cinsinden boyutunun değişkenin hemen ardından bağımsız değişken olarak geçirilmesini gerektirmesidir. Daha fazla bilgi için bkzscanf_s
. , _scanf_s_l
, wscanf_s
ve _wscanf_s_l
scanf
genişlik belirtimi.
Not
Boyut parametresi türündedir unsigned
, türünde değildir size_t
.
Genel metin yordamı eşlemeleri
TCHAR.H yordamı | _UNICODE ve _MBCS tanımlanmadı |
_MBCS tanımlanan |
_UNICODE tanımlanan |
---|---|---|---|
_vftscanf_s |
vfscanf_s |
vfscanf_s |
vfwscanf_s |
Gereksinimler
İşlev | Gerekli başlık |
---|---|
vfscanf_s |
<stdio.h> |
vfwscanf_s |
<stdio.h> veya <wchar.h> |
Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Örnek
// crt_vfscanf_s.c
// compile with: /W3
// This program writes formatted
// data to a file. It then uses vfscanf_s to
// read the various data back from the file.
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
FILE *stream;
int call_vfscanf_s(FILE * istream, char * format, ...)
{
int result;
va_list arglist;
va_start(arglist, format);
result = vfscanf_s(istream, format, arglist);
va_end(arglist);
return result;
}
int main(void)
{
long l;
float fp;
char s[81];
char c;
if (fopen_s(&stream, "vfscanf_s.out", "w+") != 0)
{
printf("The file vfscanf_s.out was not opened\n");
}
else
{
fprintf(stream, "%s %ld %f%c", "a-string",
65000, 3.14159, 'x');
// Security caution!
// Beware loading data from a file without confirming its size,
// as it may lead to a buffer overrun situation.
// Set pointer to beginning of file:
fseek(stream, 0L, SEEK_SET);
// Read data back from file:
call_vfscanf_s(stream, "%s %ld %f%c", s, _countof(s), &l, &fp, &c, 1);
// Output data read:
printf("%s\n", s);
printf("%ld\n", l);
printf("%f\n", fp);
printf("%c\n", c);
fclose(stream);
}
}
a-string
65000
3.141590
x
Ayrıca bkz.
Akış G/Ç
_cscanf_s
, _cscanf_s_l
, _cwscanf_s
, _cwscanf_s_l
fprintf_s
, _fprintf_s_l
, fwprintf_s
, _fwprintf_s_l
scanf_s
, _scanf_s_l
, wscanf_s
, _wscanf_s_l
sscanf_s
, _sscanf_s_l
, swscanf_s
, _swscanf_s_l
fscanf
, _fscanf_l
, fwscanf
, _fwscanf_l
vfscanf
, vfwscanf