YouTip LogoYouTip

C Function Wcstombs

## C Library Function - wcstombs() The `wcstombs()` function is a built-in utility in the C standard library (``) used to convert a sequence of wide characters (represented by `wchar_t`) into a sequence of multibyte characters (represented by `char`). --- ## Description The function **`size_t wcstombs(char *str, const wchar_t *pwcs, size_t n)`** converts a wide-character string pointed to by `pwcs` into a multibyte string starting at `str`. The conversion stops when: 1. A null wide character (`L'\0'`) is encountered and converted. 2. An invalid wide character is encountered. 3. `n` bytes have been written to the destination buffer `str`. --- ## Declaration Below is the standard declaration for the `wcstombs()` function: ```c size_t wcstombs(char *str, const wchar_t *pwcs, size_t n); ``` ### Parameters * **`str`**: A pointer to an array of `char` elements where the converted multibyte string will be stored. This buffer should be at least `n` bytes long. If this parameter is `NULL`, the function returns the required size in bytes for the conversion buffer without writing any data. * **`pwcs`**: A pointer to the null-terminated wide-character string (`wchar_t`) to be converted. * **`n`**: The maximum number of bytes to be written to the destination buffer `str`. ### Return Value * **Success**: Returns the number of bytes written to the destination array `str`, excluding the terminating null character (`'\0'`). * **Failure**: Returns `(size_t)-1` if an invalid wide character (one that does not correspond to a valid multibyte character in the current locale) is encountered. --- ## Code Example The following example demonstrates how to use the `wcstombs()` function to convert a wide-character string to a standard multibyte string. ```c #include #include #define BUFFER_SIZE 50 int main() { size_t ret; char *MB = (char *)malloc(BUFFER_SIZE); wchar_t *WC = L"https://www.youtip.co"; if (MB == NULL) { fprintf(stderr, "Memory allocation failed\n"); return 1; } /* Convert the wide-character string to a multibyte string */ ret = wcstombs(MB, WC, BUFFER_SIZE); if (ret == (size_t)-1) { printf("Conversion failed: Invalid wide character encountered.\n"); } else { printf("Number of bytes converted = %zu\n", ret); printf("Multibyte string = %s\n", MB); } free(MB); return 0; } ``` ### Output When you compile and run the program above, it will produce the following output: ```text Number of bytes converted = 21 Multibyte string = https://www.youtip.co ``` --- ## Important Considerations ### 1. Locale Dependency The behavior of `wcstombs()` depends on the `LC_CTYPE` category of the current system locale. If you are converting non-ASCII characters (such as Chinese, Japanese, or accented European characters), you must initialize the locale using `setlocale(LC_ALL, "")` before calling `wcstombs()`. ### 2. Null-Termination If the conversion stops because it reached the limit of `n` bytes, the resulting multibyte string in `str` **will not** be null-terminated. Ensure your destination buffer is large enough (`n` should be at least `wcslen(pwcs) * sizeof(wchar_t) + 1`) to accommodate the null terminator. ### 3. Determining Buffer Size You can determine the exact size required for the destination buffer by passing `NULL` as the `str` argument: ```c size_t required_size = wcstombs(NULL, WC, 0); ``` This returns the number of bytes required (excluding the null terminator) to store the converted string.
← C Function WctombC Function Srand β†’