mbsrtowcs_s
Mengonversi string karakter multibyte di lokal saat ini ke representasi string karakter lebarnya. Versi mbsrtowcs
dengan peningkatan keamanan seperti yang dijelaskan dalam Fitur keamanan di CRT.
Sintaks
errno_t mbsrtowcs_s(
size_t * pReturnValue,
wchar_t * wcstr,
size_t sizeInWords,
const char ** mbstr,
size_t count,
mbstate_t * mbstate
);
template <size_t size>
errno_t mbsrtowcs_s(
size_t * pReturnValue,
wchar_t (&wcstr)[size],
const char ** mbstr,
size_t count,
mbstate_t * mbstate
); // C++ only
Parameter
pReturnValue
Jumlah karakter yang dikonversi.
wcstr
Alamat buffer untuk menyimpan string karakter lebar yang dikonversi yang dihasilkan.
sizeInWords
Ukuran wcstr
dalam kata-kata (karakter lebar).
mbstr
Penunjuk tidak langsung ke lokasi string karakter multibyte yang akan dikonversi.
count
Jumlah maksimum karakter lebar untuk disimpan dalam wcstr
buffer, tidak termasuk penghentian null, atau _TRUNCATE
.
mbstate
Penunjuk ke mbstate_t
objek status konversi. Jika nilai ini adalah penunjuk null, objek status konversi internal statis digunakan. Karena objek internal mbstate_t
tidak aman untuk utas, kami sarankan Anda selalu meneruskan parameter Anda sendiri mbstate
.
Nilai hasil
Nol jika konversi berhasil, atau kode kesalahan pada kegagalan.
Kondisi kesalahan | Mengembalikan nilai dan errno |
---|---|
wcstr adalah penunjuk null dan sizeInWords > 0 |
EINVAL |
mbstr adalah penunjuk null |
EINVAL |
String secara tidak langsung menunjuk ke dengan mbstr berisi urutan multibyte yang tidak valid untuk lokal saat ini. |
EILSEQ |
Buffer tujuan terlalu kecil untuk berisi string yang dikonversi (kecuali count ; _TRUNCATE untuk informasi selengkapnya, lihat Keterangan) |
ERANGE |
Jika salah satu kondisi ini terjadi, pengecualian parameter yang tidak valid dipanggil seperti yang dijelaskan dalam Validasi parameter . Jika eksekusi diizinkan untuk melanjutkan, fungsi mengembalikan kode kesalahan dan mengatur errno
seperti yang ditunjukkan dalam tabel.
Keterangan
Fungsi ini mbsrtowcs_s
mengonversi string karakter multibyte yang secara tidak langsung diarahkan ke mbstr
menjadi karakter lebar yang disimpan dalam buffer yang diarahkan oleh wcstr
, dengan menggunakan status konversi yang terkandung dalam mbstate
. Konversi akan berlanjut untuk setiap karakter hingga salah satu kondisi ini terpenuhi:
Karakter null multibyte ditemui
Ditemui karakter multibyte yang tidak valid
Jumlah karakter lebar yang
wcstr
disimpan dalam buffer sama dengancount
.
String wcstr
tujuan selalu dihentikan null, bahkan ketika ada kesalahan, kecuali wcstr
jika merupakan penunjuk null.
Jika count
adalah nilai _TRUNCATE
khusus , mbsrtowcs_s
mengonversi string sebanyak yang akan masuk ke dalam buffer tujuan, sambil tetap meninggalkan ruang untuk terminator null.
Jika mbsrtowcs_s
berhasil mengonversi string sumber, string sumber menempatkan ukuran dalam karakter luas string yang dikonversi dan terminator null menjadi *pReturnValue
, yang disediakan pReturnValue
bukan penunjuk null. Ukuran dihitung bahkan jika wcstr
argumen adalah pointer null, yang memungkinkan Anda menentukan ukuran buffer yang diperlukan. Jika wcstr
adalah penunjuk null, count
diabaikan.
Jika wcstr
bukan penunjuk null, objek penunjuk yang diakhiri oleh mbstr
ditetapkan penunjuk null jika konversi berhenti karena karakter null yang mengakhiri tercapai. Jika tidak, alamat ditetapkan hanya melewati karakter multibyte terakhir yang dikonversi, jika ada. Ini memungkinkan panggilan fungsi berikutnya untuk memulai ulang konversi di mana panggilan ini berhenti.
Jika mbstate
adalah penunjuk null, objek statis status konversi internal mbstate_t
pustaka digunakan. Karena objek statis internal ini tidak aman untuk utas, kami sarankan Anda meneruskan nilai Anda sendiri mbstate
.
Jika mbsrtowcs_s
menemukan karakter multibyte yang tidak valid di lokal saat ini, karakter tersebut menempatkan -1 di *pReturnValue
, mengatur buffer wcstr
tujuan ke string kosong, mengatur errno
ke EILSEQ
, dan mengembalikan EILSEQ
.
Jika urutan menunjuk ke oleh mbstr
dan wcstr
tumpang tindih, perilaku mbsrtowcs_s
tidak terdefinisi. mbsrtowcs_s
dipengaruhi oleh LC_TYPE
kategori lokal saat ini.
Penting
Pastikan dan wcstr
mbstr
jangan tumpang tindih, dan itu mencerminkan jumlah karakter multibyte yang count
akan dikonversi dengan benar.
Fungsi mbsrtowcs_s
ini berbeda dari mbstowcs_s
, _mbstowcs_s_l
dengan restartability-nya. Status konversi disimpan dalam mbstate
untuk panggilan berikutnya ke fungsi yang sama atau dapat dimulai ulang lainnya. Hasil tidak terdefinisi saat mencampur penggunaan fungsi yang dapat dimulai ulang dan tidak dapat ditarik kembali. Misalnya, aplikasi harus menggunakan mbsrlen
alih-alih mbslen
, jika panggilan berikutnya digunakan mbsrtowcs_s
alih-alih mbstowcs_s
.
Di C++, menggunakan fungsi ini disederhanakan oleh kelebihan beban templat; kelebihan beban dapat menyimpulkan panjang buffer secara otomatis (menghilangkan persyaratan untuk menentukan argumen ukuran) dan mereka dapat secara otomatis mengganti fungsi yang lebih lama dan tidak aman dengan menggunakan rekan yang lebih baru dan aman. Untuk informasi selengkapnya, lihat Mengamankan kelebihan beban templat.
Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.
Pengecualian
Fungsi mbsrtowcs_s
ini aman multithread jika tidak ada fungsi dalam panggilan utas setlocale
saat ini selama fungsi ini dijalankan dan mbstate
argumen bukan penunjuk null.
Persyaratan
Rutin | Header yang diperlukan |
---|---|
mbsrtowcs_s |
<wchar.h> |
Baca juga
Konversi data
Lokal
Interpretasi urutan karakter multibyte
mbrtowc
mbtowc
, _mbtowc_l
mbstowcs_s
, _mbstowcs_s_l
mbsinit
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