C ++ mbsrtowcs () - C ++ - vakiokirjasto

Funktio mbsrtowcs () C ++: ssa muuntaa kapean monitavuisen merkkijonon laajaksi merkkijonoksi (tyyppi wchar_t).

Mbsrtowcs () -funktio määritetään otsikkotiedostossa.

mbsrtowcs () -prototyyppi

 size_t mbsrtowcs (wchar_t * dest, const char ** src, size_t len, mbstate_t * ps);

Funktio mbsrtowcs () muuntaa monitavuisen merkkijonon, jonka ensimmäistä tavua edustaa * src, vastaavaksi laajaksi merkkijonoksi ja se tallennetaan laajaan merkkijonoon, johon dest osoittaa. Kohteeseen kirjoitetaan enintään len leveä merkki.

Muunnosprosessi on samanlainen kuin mbrtowc (): n kutsuminen toistuvasti. Muunnos lopetetaan, jos:

  • Monitavuinen tyhjä merkki muunnettiin ja tallennettiin. Tällöin src on asetettu nollaksi ja ps edustaa alkuvaiheen tilaa.
  • Virheellinen monitavuinen merkki. Tässä tapauksessa src on asetettu osoittamaan ensimmäisen muuntamattoman monitavuisen merkin alku.
  • len laaja merkki on tallennettu dest. Tässä tapauksessa src on asetettu osoittamaan ensimmäisen muuntamattoman monitavuisen merkin alku.

mbsrtowcs () -parametrit

  • dest: Osoitin taulukkoon, johon muunnettu laaja merkki on tallennettu.
  • src: Osoitin osoittaa ensimmäisen muunnettavan monitavuisen merkin.
  • len: Tallennettavan enimmäismäärän laaja merkki
  • ps: Osoitin muuntotilaan, jota käytetään tulkittaessa monitavuista merkkijonoa

mbsrtowcs () Palautusarvo

  • Menestyksessä mbsrtowcs () -funktio palauttaa loppuun kirjoitettujen leveiden merkkien lukumäärän, lukuun ottamatta lopetettavaa laajaa null-merkkiä. Jos dest on nollaosoitin, se palauttaa niiden leveiden merkkien määrän, jotka olisi kirjoitettu rajoittamattoman pituuden perusteella.
  • Muunnosvirheen yhteydessä palautetaan -1 ja virheeksi asetetaan EILSEQ .

Esimerkki: Kuinka mbsrtowcs () -toiminto toimii?

 #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.utf8"); const char* str = "u0763u0757u077fu075f"; wchar_t wstr(20); mbstate_t ps = mbstate_t(); int len = 10; int retVal; retVal = mbsrtowcs(wstr, &str, len, &ps); wcout << L"Number of wide characters written (excluding L "\0 ") = " << retVal << endl; wcout << L"Wide character = " << wstr << endl; return 0; )

Kun suoritat ohjelmaa, tulos on:

 Kirjoitettujen leveiden merkkien lukumäärä (lukuun ottamatta L " 0") = 4 Leveä merkki = ݣݗݿݟ

Mielenkiintoisia artikkeleita...