wcsrtombs
Mengonversi string karakter lebar ke representasi string karakter multibyte-nya. Versi fungsi ini yang lebih aman tersedia; lihat wcsrtombs_s
.
Sintaks
size_t wcsrtombs(
char *mbstr,
const wchar_t **wcstr,
sizeof count,
mbstate_t *mbstate
);
template <size_t size>
size_t wcsrtombs(
char (&mbstr)[size],
const wchar_t **wcstr,
sizeof count,
mbstate_t *mbstate
); // C++ only
Parameter
mbstr
Lokasi alamat string karakter multibyte yang dikonversi yang dihasilkan.
wcstr
Secara tidak langsung menunjuk ke lokasi string karakter lebar yang akan dikonversi.
count
Jumlah karakter yang akan dikonversi.
mbstate
Penunjuk ke mbstate_t
objek status konversi.
Nilai hasil
Mengembalikan jumlah byte yang berhasil dikonversi, tidak termasuk byte null yang mengakhiri null (jika ada), jika tidak, -1 jika terjadi kesalahan.
Keterangan
Fungsi mengonversi wcsrtombs
string karakter lebar, dimulai dalam status konversi yang ditentukan yang terkandung dalam mbstate
, dari nilai yang tidak langsung diarahkan ke dalam wcstr
, ke alamat mbstr
. Konversi akan berlanjut untuk setiap karakter sampai: setelah karakter lebar null berakhir ditemui, ketika karakter yang tidak sesuai ditemui atau ketika karakter berikutnya akan melebihi batas yang terkandung dalam count
. Jika wcsrtombs
menemukan karakter null karakter lebar (L'\0') baik sebelum atau ketika count
terjadi, karakter tersebut akan mengonversinya menjadi 0 8-bit dan berhenti.
Dengan demikian, string karakter multibyte di dihentikan mbstr
null hanya jika wcsrtombs
menemukan karakter null karakter yang luas selama konversi. Jika urutan menunjuk ke oleh wcstr
dan mbstr
tumpang tindih, perilaku wcsrtombs
tidak terdefinisi. wcsrtombs
dipengaruhi oleh kategori LC_TYPE lokal saat ini.
Fungsi wcsrtombs
ini berbeda dari wcstombs
, _wcstombs_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 wcsnlen
, jika panggilan berikutnya digunakan wcsrtombs
alih-alih wcstombs
.
mbstr
Jika argumen adalah NULL
, wcsrtombs
mengembalikan ukuran yang diperlukan dalam byte string tujuan. Jika mbstate
null, status konversi internal mbstate_t
digunakan. Jika urutan wchar
karakter tidak memiliki representasi karakter multibyte yang sesuai, -1 dikembalikan, dan errno
diatur ke EILSEQ
.
Di C++, fungsi ini memiliki kelebihan beban templat yang memanggil rekan yang lebih baru dan aman dari fungsi ini. 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 wcsrtombs
ini aman multithread selama tidak ada fungsi dalam panggilan utas setlocale
saat ini saat fungsi ini dijalankan dan mbstate
tidak null.
Contoh
// crt_wcsrtombs.cpp
// compile with: /W3
// This code example converts a wide
// character string into a multibyte
// character string.
#include <stdio.h>
#include <memory.h>
#include <wchar.h>
#include <errno.h>
#define MB_BUFFER_SIZE 100
int main()
{
const wchar_t wcString[] =
{L"Every good boy does fine."};
const wchar_t *wcsIndirectString = wcString;
char mbString[MB_BUFFER_SIZE];
size_t countConverted;
mbstate_t mbstate;
// Reset to initial shift state
::memset((void*)&mbstate, 0, sizeof(mbstate));
countConverted = wcsrtombs(mbString, &wcsIndirectString,
MB_BUFFER_SIZE, &mbstate); // C4996
// Note: wcsrtombs is deprecated; consider using wcsrtombs_s
if (errno == EILSEQ)
{
printf( "An encoding error was detected in the string.\n" );
}
else
{
printf( "The string was successfuly converted.\n" );
}
}
The string was successfuly converted.
Persyaratan
Rutin | Header yang diperlukan |
---|---|
wcsrtombs |
<wchar.h> |
Baca juga
Konversi data
Lokal
Interpretasi urutan karakter multibyte
wcrtomb
wcrtomb_s
wctomb
, _wctomb_l
wcstombs
, _wcstombs_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