Toiminto wcsrtombs () C ++: ssa muuntaa laajan merkkijonon kapeaksi monitavuiseksi merkkijonoksi.
Wcsrtombs () -funktio määritetään otsikkotiedostossa.
wcsrtombs () -prototyyppi
size_t wcsrtombs (char * dest, const wchar_t ** src, size_t len, mbstate_t * ps);
Wcsrtombs () -toiminto muuntaa leveän merkkijonon, jota * src edustaa, vastaavaksi monitavuiseksi merkkijonoksi ja tallennetaan merkkijonoon, johon dest osoittaa, jos dest ei ole nolla. Kohteeseen kirjoitetaan enintään len merkkejä.
Muunnosprosessi muistuttaa wcrtomb (): n toistuvaa kutsumista. Muunnos lopetetaan, jos:
- Laaja nollamerkki muunnettiin ja tallennettiin. Tällöin src on asetettu nollaksi ja ps edustaa alkuvaiheen tilaa.
- Havaittiin virheellinen leveä merkki. Tässä tapauksessa src on asetettu osoittamaan ensimmäisen muuntamattoman leveän merkin alku.
- len tavua on tallennettu Dest. Tässä tapauksessa src on asetettu osoittamaan ensimmäisen muuntamattoman leveän merkin alku.
wcsrtombs () -parametrit
- > dest: Osoitin merkistöön, johon muunnettu monitavuinen merkki on tallennettu.
- src: Osoitin osoittaa ensimmäisen muunnettavan leveän merkin.
- len: Dest-taulukossa käytettävissä oleva tavujen enimmäismäärä.
- ps: Osoitin muunnostilan objektille.
wcsrtombs () Palautusarvo
- Onnistumisen yhteydessä wcsrtombs () -funktio palauttaa loppuun kirjoitettujen monitavuisten merkkien lukumäärän, lukuun ottamatta lopetettavaa laajaa null-merkkiä, mutta sisältäen siirtosekvenssit.
Jos dest on nollaosoitin, se palauttaa kirjoitettujen leveiden merkkien lukumäärän ilman lopetettavaa nollamerkkiä. - Muunnosvirheen yhteydessä palautetaan -1 ja virheeksi asetetaan EILSEQ .
Esimerkki: Kuinka wcsrtombs () -toiminto toimii?
#include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.utf8"); const wchar_t* wstr = L"u0763u0757u077fu075f"; char str(20); mbstate_t ps = mbstate_t(); int len = 10; int retVal; retVal = wcsrtombs(str, &wstr, len, &ps); cout << "Number of multibyte characters written (excluding "\0 ") = " << retVal << endl; cout << "Multibyte character = " << str << endl; return 0; )
Kun suoritat ohjelmaa, tulos on:
Kirjoitettujen monitavuisten merkkien lukumäärä (lukuun ottamatta " 0") = 8 monitavuista merkkiä = ݣݗݿݟ