C++ wctomb()

The wctomb() function in C++ converts a wide character to a multibyte character.

The wctomb() function is defined in <cstdlib> header file.

wctomb() prototype

int wctomb (char* pmb, wchar_t wc);

The wctomb() function takes two arguments and returns an integer value. This function converts the wide character represented by wc to its multibyte equivalent and is stored at the memory location pointed by pmb. The maximum number of characters that can be stored is MB_CUR_MAX.

If wc is the null character, the null byte is written to pmb.

If pmb is a null pointer, a call to wctomb() will reset the global conversion state and determines whether shift sequences are used.


wctomb() Parameters

  • pmb: Pointer to the resulting multibyte character
  • wc: Wide character that is converted to multibyte character

wctomb() Return value

If pmb is not a null pointer, wctomb() returns:

  • the number of bytes that are contained in the multibyte representation of wc.
  • -1 if wc is not a valid character.

If pmb is a null pointer, resets its internal conversion state to represent the initial shift state and returns:

  • 0 if the current multibyte encoding is not state-dependent (does not use shift sequences)
  • a non-zero value if the current multibyte encoding is state-dependent (uses shift sequences).

Example : How wctomb() function works?

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
	wchar_t wc = L'x';
	char *pmb1 = (char*)malloc(sizeof(char));
	char *pmb2 = NULL;
	int ret_val;

	cout << "When pmb is not null" << endl;
	ret_val = wctomb(pmb1, wc);

	cout << "Return Value = " << ret_val << endl;
	wcout << "Multibyte Character: " << pmb1 << endl << endl;

	cout << "When pmb is null" << endl;
	ret_val = wctomb(pmb2, wc);

	cout << "Return Value = " << ret_val << endl;
	wcout << "Multibyte Character: " << pmb2;
	
	return(0);
}

When you run the program, a possible output will be:

When pmb is not null
Return Value = 1
Multibyte Character: x↨R
When pmb is null
Return Value = 0
Multibyte Character: