C ++ wcsrtombs () - C ++ - vakiokirjasto

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ä = ݣݗݿݟ

Mielenkiintoisia artikkeleita...