Bagikan melalui


sscanf, _sscanf_l, swscanf, _swscanf_l

Membaca data yang diformat dari string. Versi yang lebih aman dari fungsi-fungsi ini tersedia; lihat sscanf_s, _sscanf_s_l, swscanf_s, . _swscanf_s_l

Sintaks

int sscanf(
   const char *buffer,
   const char *format [,
   argument ] ...
);
int _sscanf_l(
   const char *buffer,
   const char *format,
   _locale_t locale [,
   argument ] ...
);
int swscanf(
   const wchar_t *buffer,
   const wchar_t *format [,
   argument ] ...
);
int _swscanf_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 Sintaks spesifikasi format.

argument
Argumen opsional

locale
Lokal yang akan digunakan

Nilai hasil

Masing-masing fungsi ini mengembalikan jumlah bidang yang berhasil dikonversi dan ditetapkan; nilai pengembalian 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 data dari buffer ke lokasi yang diberikan oleh masing-masing argument. Setiap argument harus menjadi penunjuk ke variabel dengan jenis yang sesuai dengan penentu jenis di format. Argumen format mengontrol interpretasi bidang input dan memiliki bentuk dan fungsi yang sama dengan format argumen untuk scanf fungsi. Jika penyalinan terjadi di antara string yang tumpang tindih, perilaku tidak terdefinisi.

Untuk informasi tentang karakter bidang jenis pemindaian, lihat scanf mengetik karakter bidang. Untuk informasi tentang bidang spesifikasi format pemindaian, lihat Bidang spesifikasi format.

Penting

Saat membaca string dengan sscanf, selalu tentukan lebar untuk %s format (misalnya, "%32s" alih-alih "%s"); jika tidak, input yang diformat dengan tidak benar dapat dengan mudah menyebabkan buffer diserbu.

swscanf adalah versi karakter luas dari sscanf; argumen untuk swscanf adalah string karakter lebar. sscanf tidak menangani karakter heksadesimal multibyte. swscanf tidak menangani karakter heksadesimal lebar penuh Unicode atau "zona kompatibilitas". Jika tidak, swscanf dan sscanf berulah identik.

Versi fungsi-fungsi ini dengan _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 sscanf sscanf swscanf
_stscanf_l _sscanf_l _sscanf_l _swscanf_l

Persyaratan

Rutin Header yang diperlukan
sscanf, _sscanf_l <stdio.h>
swscanf, _swscanf_l <stdio.h> atau <wchar.h>

Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Contoh

// crt_sscanf.c
// compile with: /W3
// This program uses sscanf to read data items
// from a string named tokenstring, then displays them.

#include <stdio.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:
   sscanf( tokenstring, "%80s", s ); // C4996
   sscanf( tokenstring, "%c", &c );  // C4996
   sscanf( tokenstring, "%d", &i );  // C4996
   sscanf( tokenstring, "%f", &fp ); // C4996
   // Note: sscanf is deprecated; consider using sscanf_s instead

   // Output the data read
   printf( "String    = %s\n", s );
   printf( "Character = %c\n", c );
   printf( "Integer:  = %d\n", i );
   printf( "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