wcrtomb_s
Mengonversi karakter lebar menjadi representasi karakter multibyte-nya. Versi wcrtomb
dengan peningkatan keamanan seperti yang dijelaskan dalam Fitur keamanan di CRT.
Sintaks
errno_t wcrtomb_s(
size_t *pReturnValue,
char *mbchar,
size_t sizeOfmbchar,
wchar_t *wchar,
mbstate_t *mbstate
);
template <size_t size>
errno_t wcrtomb_s(
size_t *pReturnValue,
char (&mbchar)[size],
wchar_t *wchar,
mbstate_t *mbstate
); // C++ only
Parameter
pReturnValue
Mengembalikan jumlah byte yang ditulis atau -1 jika terjadi kesalahan.
mbchar
Karakter yang dikonversi multibyte yang dihasilkan.
sizeOfmbchar
Ukuran mbchar
variabel dalam byte.
wchar
Karakter lebar untuk dikonversi.
mbstate
Penunjuk ke mbstate_t
objek.
Nilai hasil
Mengembalikan nol atau errno
nilai jika terjadi kesalahan.
Keterangan
Fungsi mengonversi wcrtomb_s
karakter lebar, dimulai dalam status konversi yang ditentukan yang terkandung dalam mbstate
, dari nilai yang terkandung dalam wchar
, ke alamat yang diwakili oleh mbchar
. Nilainya pReturnValue
adalah jumlah byte yang dikonversi, tetapi tidak lebih dari MB_CUR_MAX
byte, atau -1 jika terjadi kesalahan.
Jika mbstate
null, status konversi internal mbstate_t
digunakan. Jika karakter yang terkandung tidak wchar
memiliki karakter multibyte yang sesuai, nilainya pReturnValue
adalah -1, dan fungsi mengembalikan errno
nilai .EILSEQ
Fungsi wcrtomb_s
ini berbeda dari wctomb_s
, _wctomb_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 akan menggunakan wcsrlen
daripada wcslen
, jika panggilan berikutnya digunakan wcsrtombs_s
alih-alih wcstombs_s
.
Di C++, menggunakan fungsi ini disederhanakan oleh kelebihan beban templat; kelebihan beban dapat menyimpulkan panjang buffer secara otomatis (menghilangkan kebutuhan untuk menentukan argumen ukuran) dan mereka dapat secara otomatis mengganti fungsi lama yang tidak aman dengan rekan-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 wcrtomb_s
ini aman multithread selama tidak ada fungsi dalam panggilan utas setlocale
saat ini saat fungsi ini dijalankan dan mbstate
null.
Contoh
// crt_wcrtomb_s.c
// This program converts a wide character
// to its corresponding multibyte character.
//
#include <string.h>
#include <stdio.h>
#include <wchar.h>
int main( void )
{
errno_t returnValue;
size_t pReturnValue;
mbstate_t mbstate;
size_t sizeOfmbStr = 1;
char mbchar = 0;
wchar_t* wchar = L"Q\0";
// Reset to initial conversion state
memset(&mbstate, 0, sizeof(mbstate));
returnValue = wcrtomb_s(&pReturnValue, &mbchar, sizeof(char),
*wchar, &mbstate);
if (returnValue == 0) {
printf("The corresponding wide character \"");
wprintf(L"%s\"", wchar);
printf(" was converted to a the \"%c\" ", mbchar);
printf("multibyte character.\n");
}
else
{
printf("No corresponding multibyte character "
"was found.\n");
}
}
The corresponding wide character "Q" was converted to a the "Q" multibyte character.
Persyaratan
Rutin | Header yang diperlukan |
---|---|
wcrtomb_s |
<wchar.h> |
Baca juga
Konversi data
Lokal
Interpretasi urutan karakter multibyte
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