sscanf_s
, _sscanf_s_l
, swscanf_s
, _swscanf_s_l
Membaca data yang diformat dari string. Versi , , ,swscanf
_swscanf_l
ini memiliki peningkatan keamanan, seperti yang dijelaskan dalam Fitur keamanan di CRT. _sscanf_l
sscanf
Sintaks
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 ] ...
);
Parameter
buffer
Data tersimpan
format
String kontrol format. Untuk informasi selengkapnya, lihat Memformat bidang spesifikasi: scanf
dan wscanf
fungsi.
argument
Argumen opsional
locale
Lokal yang akan digunakan
Nilai hasil
Masing-masing fungsi ini mengembalikan jumlah bidang yang berhasil dikonversi dan ditetapkan. Nilai yang dikembalikan tidak menyertakan bidang yang dibaca tetapi tidak ditetapkan. Nilai pengembalian 0 menunjukkan bahwa tidak ada bidang yang ditetapkan. Nilai yang dikembalikan adalah EOF
untuk kesalahan atau jika akhir string tercapai sebelum konversi pertama.
Jika buffer
atau format
adalah NULL
penunjuk, handler parameter yang tidak valid dipanggil, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, fungsi-fungsi ini mengembalikan -1 dan diatur errno
ke EINVAL
Untuk informasi tentang kode kesalahan ini dan lainnya, lihat errno
, , _doserrno
_sys_errlist
, dan _sys_nerr
.
Keterangan
Fungsi membaca sscanf_s
data dari buffer
ke lokasi yang diberikan oleh masing-masing argument
. Argumen setelah string format menentukan penunjuk ke variabel yang memiliki jenis yang sesuai dengan penentu jenis di format
. Tidak seperti versi sscanf
yang kurang aman, parameter ukuran buffer diperlukan saat Anda menggunakan jenis karakter c
bidang , , C
s
, S
, atau set kontrol string yang diapit dalam []
. Ukuran buffer dalam karakter harus disediakan sebagai parameter tambahan segera setelah setiap parameter buffer yang memerlukannya. Misalnya, jika Anda membaca menjadi string, ukuran buffer untuk string tersebut diteruskan sebagai berikut:
wchar_t ws[10];
swscanf_s(in_str, L"%9s", ws, (unsigned)_countof(ws)); // buffer size is 10, width specification is 9
Ukuran buffer mencakup penghentian null. Bidang spesifikasi lebar dapat digunakan untuk memastikan bahwa token yang dibaca akan sesuai dengan buffer. Jika tidak ada bidang spesifikasi lebar yang digunakan, dan token yang dibaca terlalu besar agar pas di buffer, tidak ada yang ditulis ke buffer tersebut.
Satu karakter dapat dibaca sebagai berikut:
wchar_t wc;
swscanf_s(in_str, L"%c", &wc, 1);
Contoh ini membaca satu karakter dari string input lalu menyimpannya dalam buffer berkarakter lebar. Saat Anda membaca beberapa karakter untuk string yang tidak dihentikan null, bilangan bulat yang tidak ditandatangani digunakan sebagai spesifikasi lebar dan ukuran buffer.
char c[4];
sscanf_s(input, "%4c", &c, (unsigned)_countof(c)); // not null terminated
Untuk informasi selengkapnya, lihat scanf_s
, , wscanf_s
_scanf_s_l
, _wscanf_s_l
dan scanf
ketik karakter bidang.
Catatan
Parameter ukuran berjenis unsigned
, bukan size_t
. Saat mengkompilasi target 64-bit, gunakan cast statis untuk mengonversi _countof
atau sizeof
menghasilkan ke ukuran yang benar.
Argumen format
mengontrol interpretasi bidang input dan memiliki bentuk dan fungsi yang sama dengan format
argumen untuk scanf_s
fungsi. Jika penyalinan terjadi di antara string yang tumpang tindih, perilaku tidak terdefinisi.
swscanf_s
adalah versi karakter luas dari sscanf_s
; argumen untuk swscanf_s
adalah string karakter lebar. sscanf_s
tidak menangani karakter heksadesimal multibyte. swscanf_s
tidak menangani karakter heksadesimal lebar penuh Unicode atau "zona kompatibilitas". Jika tidak, swscanf_s
dan sscanf_s
berulah identik.
Versi fungsi-fungsi ini yang memiliki _l
akhiran identik kecuali mereka menggunakan parameter lokal yang diteruskan alih-alih lokal utas saat ini.
Pemetaan rutin teks generik
TCHAR.H Rutin |
_UNICODE dan _MBCS tidak ditentukan |
_MBCS Didefinisikan |
_UNICODE Didefinisikan |
---|---|---|---|
_stscanf_s |
sscanf_s |
sscanf_s |
swscanf_s |
_stscanf_s_l |
_sscanf_s_l |
_sscanf_s_l |
_swscanf_s_l |
Persyaratan
Rutin | Header yang diperlukan |
---|---|
sscanf_s , _sscanf_s_l |
<stdio.h> |
swscanf_s , _swscanf_s_l |
<stdio.h> atau <wchar.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Contoh
// 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
Baca juga
Streaming I/O
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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk